2016-08-24 3 views
0

У меня есть два списка, одно целое и одна строка. Эти значения вводятся во время цикла, поэтому они связаны друг с другом (например, ListOfInteger.Item (i) и ListOfString.Item (i) были введены одновременно и связаны друг с другом). Я отсортировал и впоследствии переместил список целых чисел. Есть ли способ иметь список строк, все еще связанных со списком целых чисел, чтобы отображать их в текстовом поле. Например:Связать список с другим, который был отсортирован

List of Strings (surname):   List of Integers (score): 
      Jones         4 
      Perry         2 
      Morris        6 

    List of Strings (surname):  Sorted List of Integers: 
      Jones        2 
      Perry        4 
      Morris        6 

Edit:

If (name.Count + 1) < compnum Then 
     name.Add(txtName.Text) 
     score.Add(txtScore.Text) 
Else 
     txtName.Text(Hide) 
     txtScore.Text(Hide) 
     btnSort.Text(Show) 
End If 

...

score.Sort() 
score.Reverse() 
txtSortedScore1.Text = score(0) 
(and so forth) 

Как я могу связать эти два списка вместе для того, чтобы связать данные в списке строк с отсортированный список целых чисел?

Edit - Конечный результат должен выглядеть следующим образом:

List of Strings (surname):  Sorted List of Integers: 
      Perry        2 
      Jones        4 
      Morris        6 
+0

Я думаю, что [** 'Словарь (Of TKey, TValue)' **] (https://msdn.microsoft.com/en-us/library/xfhwa508 (v = vs.110). aspx) могут быть полезны здесь. Или даже лучше [** 'SortedDictionary (Of TKey, TValue)' **] (https://msdn.microsoft.com/en-us/library/f7fta44c (v = vs.110) .aspx). –

+0

Вместо хранения ** тесно связанных ** данных в параллельных коллекциях используйте класс: [Руководство по пятиминуткам для классов и списков] (http://stackoverflow.com/a/34164458/1070452) – Plutonix

ответ

0

Вы должны обернуть строку и целое число в другом объекте.

Class Person 
    Public String SurName 
    Public Int Score 
End Class 

Оттуда вы можете манипулировать объектами в любом случае вы хотите, а затем перебрать их и выводить данные, как вам нравится.

Что-то вроде этого:

Dim persons = New List(Of Person)() 

persons.Add(New Person() With { _ 
    Key .SurName = "Jones", _ 
    Key .Score = 4 _ 
}) 

For Each p As var In persons.OrderBy(Function(x) x.Score) 
    ListBox.Add(p.SurName + p.Score) 
Next 

Если бы предоставить код, мы могли бы помочь вам больше.

+0

К сожалению, мой код удален слишком велики, чтобы обеспечить его. Я использую общие списки и добавляю элементы в списки, используя цикл For ... Next. – AParkInTheWalk

+0

Затем вы должны упростить свой код, чтобы продемонстрировать свою проблему в изолированном примере. –

+0

Я добавил упрощенный фрагмент кода. В указанном текстовом поле должно быть указано Имя и Оценка для конечного результата. – AParkInTheWalk

0

Существует несколько способов сортировки имен. Вот один из способов:

Dim names = {"Jones", "Perry", "Morris"}, score = {4, 2, 6} 

Dim sortedIndexes = Enumerable.Range(0, score.Length).OrderBy(Function(i) score(i)).ToArray ' { 1, 0, 2 } 

Dim sortedNames = sortedIndexes.Select(Function(i) names(i)).ToList ' { "Perry", "Jones", "Morris" } 
Dim sortedScore = sortedIndexes.Select(Function(i) score(i)).ToList ' { 2, 4, 6 } 
1

Методы, предлагаемые другими пользователями для использования класса контейнера или словаря, являются лучшими решениями. Однако, чтобы ответить на вопрос, как указано, то, что вы хотите сделать, это выполнить ключевой вид. К сожалению, класс List(Of T) не предоставляет эту функцию; он предоставляется Array Class.

Это немного запутанно, поскольку сначала вы сбрасываете два списка в массивы, сортируете массивы и, наконец, воссоздаете списки с отсортированными результатами.

Dim keysList As List(Of Int32) = New List(Of Integer)(New Int32() {4, 2, 6}) 
Dim itemsList As List(Of String) = New List(Of String)(New String() {"Jones", "Perry", "Morris"}) 

Dim keys As Int32() = keysList.ToArray 
Dim items As String() = itemsList.ToArray 
Array.Sort(keys:=keys, items:=items) 

keysList = New List(Of Integer)(keys) 
itemsList = New List(Of String)(items) 
Смежные вопросы