将列表与已排序的另一个列表相关联

时间:2016-08-24 13:45:27

标签: vb.net

我有两个列表,一个整数和一个字符串。这些值在循环期间输入,因此它们关联在一起(例如,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  

编辑:

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)

如何将这两个列表关联在一起,以便将字符串列表中的数据与整数的排序列表相关联?

编辑 - 最终结果应如下所示:

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

3 个答案:

答案 0 :(得分:1)

其他人建议使用容器类或字典的技术是更好的解决方案。但是,要回答所述的问题,您要做的是执行键控排序。不幸的是,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) 类不提供此功能;它由Array Class提供。

这有点令人费解,因为首先将两个列表转储到数组,对数组进行排序,最后使用排序结果重新创建列表。

image.src = "https://img.olx.pt/images_olxpt/880146485_1_1000x700_conjunto-de-sofs-terno-em-couro-verdadeiro-lisboa.jpg"

答案 1 :(得分: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

如果您愿意提供代码,我们可以为您提供更多帮助。

答案 2 :(得分: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 }