using your suggestions and the swap command vs manual swapping this is my code:
public b as string 'optional string used to hold the array data for file or split later PUBLIC SUB button4_click() ' initialize array DIM myArray AS Integer[200] DIM a AS Integer DIM i AS Integer FOR i = 0 TO 199 STEP 1 'add array items myArray[i] = i NEXT FOR i = 0 TO 199 STEP 1 ' random swap array items a = Int(Rnd(i + 1)) SWAP myArray[i], myArray[a] NEXT FOR i = 0 TO 199 STEP 1 ' write items in listview2 listview1.MoveTo(myArray[i]) c = listview1.Item.Key listview2.add(c, listview1.item.text) NEXT FOR i = 0 TO 199 STEP 1 'optional step to write array as a string for file or whatever use b &= "slot" & myArray[i] & "," NEXT PRINT b END PUBLIC SUB Button1_Click() 'an optional way to load the array values from the variable b and / or a file if b was file loaded DIM egg AS String[] DIM c AS String listview1.Clear egg = Split(b, ",") FOR EACH c IN egg TRY listview1.Add(c, c) IF ERROR THEN RETURN NEXT IF listview1.Count >= 200 THEN RETURN END JB Skaggs Simonart Dominique wrote: > > Simonart Dominique a écrit : >> jbskaggs a écrit : >>> I came up with a way to random sort listview. (Iuse this for random >>> shuffling card slots on games) But it isnt efficient some pointers if >>> you >>> dont mind? >>> >>> I use two listviews one to sort from and one to sort to: >>> >>> I first copy all the listitems from list 1 to list 2 EXCEPT the key for >>> listview2 items = the integer from my for next loop >>> >>> eg >>> for i = 0 to listview1.count -1 step 1 >>> listview2.add(i, listview1.item.text) >>> next >>> >>> then with a for next loop based on the length of list1 I copy the >>> listview.item key to a string A and listview.item.text to second string >>> B >>> >>> Then I calculate a random number the count of listview2 and add that to >>> a >>> integer C >>> thenadd it to listview2 >>> listview2.add("n"&A, B,,C) "n"&A creates a key of n1, n2, etc ... >>> >>> >>> AFter the loop ends >>> >>> I run a second loop >>> >>> and run >>> for i = 0 to listview1.count -1 step 1 >>> listview.moveto(i) >>> listview2.item.delete >>> next >>> >>> This gives me a random sorted list in viewlist2 of viewlist1 with no >>> duplicates etc- >>> >>> But is there a more efficient way of doing this? >>> >>> here is total code: >>> >>> PUBLIC SUB button3_click() >>> DIM a AS String >>> DIM d AS Integer >>> DIM e AS Integer >>> DIM i AS Integer >>> DIM c AS Integer >>> listview1.Clear 'clears the list >>> FOR i = 0 TO 199 STEP 1 'number of items to add >>> listview2.Add(i, "Slot" & i) 'adds items to sort to list >>> NEXT 'next item >>> i = 0 >>> >>> FOR i = 0 TO 199 STEP 1 'number of items >>> e = 0 >>> listview1.MoveTo(i) 'goto item >>> a = listview1.Item.Text 'get text >>> PRINT a >>> d = listview1.Key 'get key >>> PRINT "old key", d >>> listview1.Item.Delete 'delete item (the cut part of cut and paste) >>> e = Round(Rnd(200)) ' make sure old key doesNOT equal NEW Key >>> PRINT e, "<<<< the randomimzed number" >>> >>> IF e >= 200 THEN e = 199 >>> listview2.Add("n" & d, "n" & a,, e) 'adds cut items after >>> randomly >>> chosen item >>> listview3.Add("n" & d, "n" & a) >>> PRINT "new key", e >>> NEXT 'next item down >>> >>> FOR i = 0 TO 199 STEP 1 'number of items >>> listview2.MoveTo(i) >>> listview2.Item.Delete >>> NEXT >>> >>> ValueBox1.value = listview1.Count >>> END >>> >>> JB SKaggs >> Hi, >> >> Let say you want to populate an array with 0-199 randomly >> (please note that I write this directly, so check carefully >> the syntax) >> >> dim myArray as integer[200] >> dim A as integer >> dim i as integer >> >> FOR i=0 to 199 >> A=int(Rnd(200-i)) >> ' I think we could use a Swap instruction >> ' instead of the 2 instructions below >> myArray[i]=A >> myArray[A]=i >> NEXT >> >> That's all >> If these numbers was the keys of the initial Listview you >> just have to populate the second Listview in the new order >> >> Hope this help >> Dominique Simonart >> >> > Well, never write directly like that!! > I make some mistake in my sample, here is a new one: > > DIM myArray AS Integer[200] > DIM A AS Integer > DIM i AS Integer > > 'initialize the array > FOR i=0 TO 199 > myArray[i]=i > NEXT > > 'Randomize the order of the array > FOR i = 199 TO 0 STEP -1 > A = Int(Rnd(i + 1)) > SWAP myArray[i], myArray[A] > NEXT > > > ------------------------------------------------------------------------------ > This SF.net email is sponsored by: > High Quality Requirements in a Collaborative Environment. > Download a free trial of Rational Requirements Composer Now! > http://p.sf.net/sfu/www-ibm-com > _______________________________________________ > Gambas-user mailing list > Gambas-user@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gambas-user > > -- View this message in context: http://www.nabble.com/A-random-sort-of-listview-tp22919766p22922075.html Sent from the gambas-user mailing list archive at Nabble.com. ------------------------------------------------------------------------------ This SF.net email is sponsored by: High Quality Requirements in a Collaborative Environment. Download a free trial of Rational Requirements Composer Now! http://p.sf.net/sfu/www-ibm-com _______________________________________________ Gambas-user mailing list Gambas-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gambas-user