VB.Net Array - Объединяет массив элементов в больший массив, когда порядок элементов отличается - PullRequest
0 голосов
/ 23 ноября 2010

Предположим, у меня есть массив

myArray1 = {A, B, C, D, E, F,…., T}

У меня есть другой, который содержит подмножество элементов myArray1, но где порядок может отличаться

myArray2 = {A, C, H, G, F, M, R, S, T}

Я могу определить порядок элементов массива в myArray1 и myArray2 независимо.

Как мне слить myArray2 с myArray1 в правильном порядке элементов? Предполагается, что отсутствующие элементы myArray1 в myArray2 пусты.

Ответы [ 3 ]

1 голос
/ 23 ноября 2010

Вы имеете в виду что-то подобное?

''// 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 (таким образом, являются дубликатами в результате) в отсортированном порядке .

0 голосов
/ 23 ноября 2010

Если вы ориентируетесь на версию 4 Framework, вы можете использовать SortedSet(Of T).

В противном случае, простейшим решением может быть просто создать третий массив (или,List(Of T)), который содержит элементы первых двух массивов, удаляет любые дубликаты и применяет любой алгоритм сортировки, подходящий для вашего приложения.

И часто простое решение является лучшим, если только по какой-то причине вымы собираемся делать это снова и снова в цикле, и абсолютно необходимо выжать из него максимально возможную производительность.

0 голосов
/ 23 ноября 2010

Предполагая, что это строки, как в

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
...