>我遇到需要对数组进行排序并保留当前键值对的情况。
例如,此数组:
(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)