【问题标题】:How to get the indices of sorted list in VB.net?如何在 VB.net 中获取排序列表的索引?
【发布时间】:2022-11-03 16:56:37
【问题描述】:

我有一个如下所示的列表:

Dim mList As New List(Of Double)
mList.AddRange({3, 2, 5, 3, 6})

现在我想对其进行排序并获取排序列表的索引。对于排序,我可以使用

mList.sort()

但是如何获取排序列表的索引,即 (1,0,3,2,4)

【问题讨论】:

  • 您可能希望使用不同的集合,如 Dictionary(Of Integer, Double)List(Of Class)(两个属性,一个用于索引器,一个用于关联值),因此当您订购集合时,索引器和关联值将被保留.或者生成一个存储这些引用的匿名类型的新列表
  • 但我也可以有重复的值。所以这行不通
  • 是否有重复值有什么关系?任何集合都按照您的List(Of Double) 进行排序,但如果这是您想要做的,则此集合不能保留在集合排序之前由值占据的位置。否则,请进一步解释您的情况
  • 字典可以处理重复值,键是唯一的索引

标签: vb.net list sorting


【解决方案1】:

就目前而言,你不能。当您对List 进行排序时,它不会保留项目先前索引的任何记录,为什么会这样?这取决于你。有多种选择可供您使用。一种是创建一个包含原始项目的数组和另一个包含原始索引的数组,然后根据项目数组对它们进行排序。然后索引数组将指示项目的原始索引。例如。

Dim itemsList As New List(Of Integer) From {3, 2, 5, 3, 6}

Dim itemsArray = itemsList.ToArray()
Dim indexesArray = Enumerable.Range(0, itemsArray.Length).ToArray()

Array.Sort(itemsArray, indexesArray)

itemsList.Clear()
itemsList.AddRange(itemsArray)

For i = 0 To itemsList.Count - 1
    Console.WriteLine($"Current index: {i}; Value: {itemsList(i)}; Original index: {indexesArray(i)}")
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 2017-04-02
    • 2019-12-30
    • 1970-01-01
    • 2013-07-24
    • 2014-06-29
    • 2014-02-04
    相关资源
    最近更新 更多