我需要对数字列表进行排序,但是我需要保留它们的初始索引。
之前,我刚刚创建了一个数字数组,然后又创建了另一个索引数组,如下所示:
Dim AverageSuccess(23) As Decimal
Dim intervalList() As Integer = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}
x = 2
Do
Sorted = True
For i = 23 To x Step -1
If AverageSuccess(i) < AverageSuccess(i - 1) Then
TempNum = AverageSuccess(i)
AverageSuccess(i) = AverageSuccess(i - 1)
AverageSuccess(i - 1) = TempNum
TempIndex = intervalList(i)
intervalList(i) = intervalList(i - 1)
intervalList(i - 1) = TempIndex
Sorted = False
End If
Next
x += 1
Loop Until Sorted
但是,这是针对一个项目的,我的老师告诉我这是不好的编程习惯,应该改用列表。
我一直在努力寻找一个简单的示例,说明如何为此目的在VB.net中使用列表,因此,如果有人可以给我一个示例,我将不胜感激。
我不知道您对课堂上的清单有多少了解...
让我们创建一个包含一些整数的列表:
Dim nums As New List(Of Integer) From {9, 8, 4, 5}
现在,我们要存储这些数字的原始索引。我们可以使用Select
方法执行此操作,该方法具有一个可选参数,该参数将提供当前项目的索引,并创建一个带有可以为其命名的项目的新实体,例如“ Num”和“ Idx”:
Dim numsWithIndex = nums.Select(Function(n, i) New With {.Num = n, .Idx = i})
然后,我们可以使用LINQ方法OrderBy
以所需顺序获取这些实体:
Dim sortedNums = numsWithIndex.OrderBy(Function(nwi) nwi.Num)
我们可以看看我们用什么构造了
Console.WriteLine(String.Join(vbCrLf, sortedNums))
输出:
{ Num = 4, Idx = 2 }
{ Num = 5, Idx = 3 }
{ Num = 8, Idx = 1 }
{ Num = 9, Idx = 0 }
(它显示了我们为New
先前创建的匿名类型的属性赋予的名称。)
这是作为控制台应用程序的全部内容,您可以复制并粘贴以在计算机上进行调查:
Module Module1
Sub Main()
Dim nums As New List(Of Integer) From {9, 8, 4, 5}
Dim numsWithIndex = nums.Select(Function(n, i) New With {.Num = n, .Idx = i})
Dim sortedNums = numsWithIndex.OrderBy(Function(nwi) nwi.Num)
Console.WriteLine(String.Join(vbCrLf, sortedNums))
Console.ReadLine()
End Sub
End Module
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句