.net 如何按子值对数组排序

.net 如何按子值对数组排序,.net,vb.net,.net,Vb.net,我已经发现并修改了下面的代码,它运行良好,但需要更多的修改,我无法理解。我希望它在同一个数值内随机排序。基本上,我希望它做的是随机排序,但然后分组(或列表)的价值,以降序一切。例如,您可能有一个名称和一个值,但它可能看起来像这样。姓名2、姓名2、姓名2、姓名3、姓名4、姓名4、姓名5、姓名8、姓名8等。。在它结束之前,我可以有大约500个名字,其中有大约8个或9个不同的值,因此每个值组中有大约90个名字 Public Class Form1 Dim ListOfValues As N

我已经发现并修改了下面的代码,它运行良好,但需要更多的修改,我无法理解。我希望它在同一个数值内随机排序。基本上,我希望它做的是随机排序,但然后分组(或列表)的价值,以降序一切。例如,您可能有一个名称和一个值,但它可能看起来像这样。姓名2、姓名2、姓名2、姓名3、姓名4、姓名4、姓名5、姓名8、姓名8等。。在它结束之前,我可以有大约500个名字,其中有大约8个或9个不同的值,因此每个值组中有大约90个名字

     Public Class Form1

Dim ListOfValues As New List(Of List(Of String))
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.txtA1.Focus()
End Sub

Private Sub AddTB(row As Integer, column As Integer, start As Char)
    Dim tb As New TextBox
    Dim offset As Integer = Math.Sign(Asc(start) - 65) * (100 + tb.Width * 3)
    tb.Name = "txt" & Chr(row + Asc(start)) & column.ToString
    tb.Text = tb.Name
    tb.Location = New Point(((column - 1) * tb.Width) + offset, (row * tb.Height))
    Me.Controls.Add(tb)
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Button1.Enabled = True
    For I = 0 To 9
        ListOfValues.Add({Me.Controls("txt" & Chr(I + 65) & "1").Text, _
                          Me.Controls("txt" & Chr(I + 65) & "2").Text}.ToList)

    Next
    ListOfValues = ShuffleInfo(ListOfValues)
    'This fills the other textboxes with the data from the shuffled list
    For I = 0 To 9
        Me.Controls("txt" & Chr(I + 77) & "1").Text = ListOfValues(I)(0)
        Me.Controls("txt" & Chr(I + 77) & "2").Text = ListOfValues(I)(1)

    Next
End Sub

Private Function ShuffleInfo(ValuesToShuffle As List(Of List(Of String))) As List(Of List(Of String))
    'this follows the same basic routine you were using, swapping each item with a random item.
    Dim rand As New Random(Now.Millisecond)

    For counter = 0 To ValuesToShuffle.Count - 1
        Dim n = rand.Next(counter + 1)
        Dim temp As List(Of String) = ValuesToShuffle(counter)
        ValuesToShuffle(counter) = ValuesToShuffle(n)
        ValuesToShuffle(n) = temp
    Next
    ShuffleInfo = ValuesToShuffle
    Button1.Enabled = False
End Function
End Class

林克在这里很方便。看看这是否有帮助:

替换此行:

ListOfValues = ShuffleInfo(ListOfValues)
ListOfValues = (From data In ShuffleInfo(ListOfValues)
                    Order By data(1) Descending).ToList
这一行:

ListOfValues = ShuffleInfo(ListOfValues)
ListOfValues = (From data In ShuffleInfo(ListOfValues)
                    Order By data(1) Descending).ToList
这将按照列表中每个项目的第二个元素对列表进行分组,但在每个分组中保持顺序的随机性

从这样的东西:

C 3
B 1
C 1
B 2
C 2
A 3
A 2
B 3
A 1
你得到这个:

C 3
A 3
B 3
B 2
C 2
A 2
B 1
C 1
A 1

我似乎不能让这个为我工作。我会把它添加到洗牌数组中吗。。私有函数