VB.Net阵列 - 合并元件阵列分成较大的阵列元素时顺序不同
问题描述:
假设我有一个数组VB.Net阵列 - 合并元件阵列分成较大的阵列元素时顺序不同
myArray1 = {A,B,C,d,E,F,...,T}
我有另一个包含myArray1的元素的子集,但其中的顺序可以变化
myArray2 = {A,C,H,G,F,M,R,S,T}
我可以独立地确定myArray1和myArray2中数组元素的顺序。
如何以正确的元素顺序将myArray2合并到myArray1中?假设myArray2中缺少的myArray1元素为空。
答
假设这些都是字符串,如
myArray1 = { "A", "B", "C", "D", "E", "F", …., "T"}
然后
dim d as new dictionary(of string,something)
for each s as string in myarray1
if not d.containskey(s) then
d.add(s,something)
end if
next
for each s as string in myarray1
if not d.containskey(s) then
d.add(s,something)
end if
next
for each s as string in d.keys
debug.writeline s
next
答
如果您的目标框架版本4,你可以使用一个SortedSet(Of T)
。否则,最简单的解决方案可能只是创建第三个数组(或者,List(Of T)
),该数组包含前两个数组的元素,删除任何重复项,并应用适合您的应用程序的任何排序算法。
通常情况下,最简单的解决方案是最好的,除非有一些原因,你会一遍又一遍地在一个循环中做这个事情,绝对需要挤出最多的性能。
答
你的意思是这样的吗?
''// Contains only the subset of myArray1 that is also in myArray2
Dim intersection As New SortedSet(Of Char)(myArray1)
intersection.IntersectWith(myArray2)
''// Merge back into the first array via a sorted list:
Dim sorted As New List(Of Char)(myArray1)
sorted.AddRange(intersection)
sorted.Sort()
Dim result As Char() = sorted.ToArray()
这将导致在包含的myArray1
所有元素从该myArray2
也出现在myArray1
(在结果因此是一式两份)的所有元素,以及,以排序的顺序数组。
你为什么不开始告诉我们正确的元素顺序是什么? – LukeH 2010-11-23 15:41:17