B4J Code Snippet Randomize Re-Sort List

Hi there...

Yesterday update the google drive link for B4XDesigner and needed to add the "Names" of programmers "loose" their time (i think that all win - when sharing knowledge and ideas) for this project... but I want to be fair by showing all names contribute in that big project...




so needed to randomize the sort of the list... thought this way... i am sure there are better ways (you can share them here)

Well my way:


B4X:
Sub shownames
    Dim allnames As List
    allnames.Initialize
    allnames.Add("Georgios Kantzas - MAGMA")
    allnames.Add("Aeric")
    allnames.Add("OliverA")
    allnames.Add("zed")
    allnames.Add("CableGuy")
    allnames.Add("Walterf25")
    allnames.Add("Jahwsant")
    allnames.Add("Jakebullet70")
    allnames.Add("Alexander Stolte")
    lblAbout.Text = "B4XDesigner About..." & CRLF & CRLF & "Created by (Randomized Series):" & CRLF & CRLF & showrndlist(allnames) & CRLF & CRLF & "Click Names to re-sort..."
End Sub

Sub showrndlist(aa As List) As String
    Dim how As Int = aa.Size
    Dim newlist As List
    Dim newtext As String
    newlist.Initialize
    For k=0 To how-1
        newlist.Add(aa.Get(k))   
    Next

    Dim a As Int
    Dim b As Int
    Dim c As String
    Dim d As String

    For k=0 To NumberFormat2((how-1)/2,0,0,0,False)

        Do Until a<>b
        a =Rnd(0,how)
        b =Rnd(0,how)
        Loop
       
        c=newlist.Get(a)
        d=newlist.Get(b)
       
        newlist.Set(a,d)
        newlist.Set(b,c)

    Next
   
    For k=0 To how-1
        newtext=newtext & newlist.Get(k)
        If k<how-1 Then
            newtext=newtext & ", "
        End If
    Next
   
    Return newtext
End Sub



Private Sub lblAbout_MouseClicked (EventData As MouseEvent)
    shownames
End Sub
 

Daestrum

Expert
Licensed User
Longtime User
B4X:
Sub Process_Globals
    Dim collections As JavaObject
    Dim random As JavaObject
End Sub

Sub AppStart (Args() As String)

    collections.InitializeStatic("java.util.Collections")
    random.InitializeNewInstance("java.util.Random",Array(DateTime.Now))

    Dim myList As List
    myList.Initialize
    myList.AddAll(Array As String("Element 1", "Element 2", "Element 3", "Element 4", "Element 5")) ' Add your elements here

    collections.RunMethod("shuffle",Array(myList,random))

    For Each element In myList
        Log(element)
    Next
End Sub
 

PaulMeuris

Well-Known Member
Licensed User
Not using Java...
B4X:
Private Sub showrndlist(names As List) As String
    Dim strnames As String
    Dim nmap As Map
    nmap.Initialize
    For i = 0 To names.Size -1
        nmap.put(i,names.Get(i))
    Next
    Do Until nmap.Size = 0
        Dim pos As Int = Rnd(0,names.Size)
        If nmap.Size > 0 And nmap.ContainsKey(pos) Then
            strnames = strnames & names.Get(pos) & CRLF
            nmap.Remove(pos)
        End If
    Loop
    Return strnames
End Sub
 

Swissmade

Well-Known Member
Licensed User
Longtime User
Working Perfect and fast.
Thanks
 

Swissmade

Well-Known Member
Licensed User
Longtime User
Read the thread; the main function is to extract data randomly without you getting the same data multiple times.
Thanks will check it out
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…