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元素为空。

+3

你为什么不开始告诉我们正确的元素顺序是什么? – LukeH 2010-11-23 15:41:17

假设这些都是字符串,如

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(在结果因此是一式两份)的所有元素,以及,以排序的顺序数组。