VB.net 排序和保留密钥



>我遇到需要对数组进行排序并保留当前键值对的情况。

例如,此数组:

(0) = 4
(1) = 3
(2) = 1
(3) = 2

需要像这样排序

(2) = 1
(3) = 2
(1) = 3
(0) = 4

保留原始密钥。Array.Sort(myArray)按正确的顺序排序,但不保留索引。我需要一个可以做到的变体。

编辑使用链接,这似乎接近我想要的。我只需要删除多余的括号即可将其转换为 vb.net 吗?

myList.Sort((firstPair,nextPair) =>
    {
        return firstPair.Value.CompareTo(nextPair.Value);
    }
);

(我也会将其集成为功能或其他功能吗?

在数组中,顺序由索引(你称之为"键")决定。因此,不能有这样的数组:

(2) = 1
(3) = 2
(1) = 3
(0) = 4

您需要的是一个具有键、顺序(独立于)的数据结构。为此,可以使用List(Of KeyValuePair)或(如果使用 .net 4)List(Of Tuple(Of Integer, Integer));Ken 在评论中提供的链接中显示了几个示例(为方便起见,我将在此处重复):

  • 如何按值对 C# 字典进行排序?

编辑:另一种选择是使用 LINQ 自动创建排序IEnumerable(Of Tuple(Of Integer, Integer))

Dim a() As Integer = {4, 3, 1, 2}  ' This is your array
Dim tuples = a.Select(Function(value, key) New Tuple(Of Integer, Integer)(key, value))
Dim sorted = tuples.OrderBy(Function(t) t.Item2)

(未经测试,目前没有可用的Visual Studio)

由于您使用的是 .net 2.0(因为您在其中一个注释中说您使用的是 Visual Studio 2005),因此如果每个数组值只出现一次,使用 OrderedDictionary 可能是一个选项。由于 OrderedDictionaries 是按键排序的,因此您可以使用

  • 数组索引作为字典值
  • 数组值作为字典(将用于对字典进行排序)。

您要查找的是将其存储为<int,int>字典,并按字典按值排序。

我认为字典的VB .Netsynatx是Dictionary(Int,Int)

最新更新