0

I have found and modified the below code that works well but needs more modification that I cant figure out. I want it to sort randomly within the same value number. Basically what I want it to do is randomly sort everything but then group (or list) everything by value in desending order. For example you would have a name and a value but it might look smething like this. Name 2, name 2, name 2, name 3, name 4, name 4, name 4, name 5, name 8, name 8, ect.. Before it is over I could have about 500 names with about 8 0r 9 different values thus about 90 names in each value group

     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

enter image description here

1 Answer 1

1

LINQ is handy here. See if this helps:

replace this line:

ListOfValues = ShuffleInfo(ListOfValues)

With this line:

ListOfValues = (From data In ShuffleInfo(ListOfValues)
                    Order By data(1) Descending).ToList

This will group the list by the second element of each item in the list, but keep the order random in each grouping.

From something like this:

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

You get this:

C 3
A 3
B 3
B 2
C 2
A 2
B 1
C 1
A 1
Sign up to request clarification or add additional context in comments.

1 Comment

I cant seem to get this to work for me. Would I add it to the shuffle array ie.. private function

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.