簡體   English   中英

如何按子值對數組排序

[英]How to sort an array by a subvalue

我發現並修改了下面的代碼,這些代碼很好用,但需要進行更多我無法弄清的修改。 我希望它在相同的值數字內隨機排序。 基本上我想要它做的是隨機排序所有內容,然后按降序將所有內容按值分組(或列出)。 例如,您將有一個名稱和一個值,但看起來可能像這樣。 名稱2,名稱2,名稱2,名稱3,名稱4,名稱4,名稱4,名稱5,名稱8,名稱8等。在結束之前,我可以擁有約500個名稱,其中約8個0r 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

在此處輸入圖片說明

LINQ在這里很方便。 看看是否有幫助:

替換此行:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM