Avatar billede clausjul Nybegynder
22. januar 2004 - 14:56 Der er 9 kommentarer og
1 løsning

"Blande" en array

Jeg har en array med følgende:

@array = (1,1,1,1,0,0,0,0)

Indholdet vil jeg gerne blandet tilfældigt og den nye talrækkefølge skal så lægges ind i en ny array.

F.eks.

før: 1,1,1,1,0,0,0,0
efter: 0,1,1,0,1,0,0,1
Avatar billede mfalck Praktikant
22. januar 2004 - 15:08 #1
#!/bin/perl

@array = (1,1,1,1,0,0,0,0) ;

$lgd = $#array;

for ($i=0; $i<$lgd;$i++) {
$j=int(rand($lgd));
  push @newary, $array[$j];

}

print @newary;
Avatar billede mfalck Praktikant
22. januar 2004 - 15:09 #2
der er naturligvis muligheden for at rand giver samme tal flere gange og derfor ikke virker korrekt.
Avatar billede mfalck Praktikant
22. januar 2004 - 15:10 #3
hmm .. det gør den desværre.
Avatar billede clausjul Nybegynder
22. januar 2004 - 15:11 #4
Ja, det har jeg lige opdaget :(
Avatar billede clausjul Nybegynder
22. januar 2004 - 15:13 #5
Det må være sådan, at rand vælger en element ud fra det og derefter splicer man den, så pre-arrayet bliver efterhånden mindre og mindre?
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 15:18 #6
in situ shuffling:

@array = (1,1,1,1,0,0,0,0);

for ($i=0;$i<=$#array;$i++) {
  $a=int(rand($#array+1));
  $tmp=$array[$i];
  $array[$i]=$array[$a];
  $array[$a]=$tmp;
}

for ($i=0;$i<=$#array;$i++) {
  print "$i er $array[$i]\n";
}
Avatar billede clausjul Nybegynder
22. januar 2004 - 15:19 #7
Erik, læg et svar ;-)
Avatar billede erikjacobsen Ekspert
22. januar 2004 - 15:24 #8
Tak, samler ikke på point.
Avatar billede clausjul Nybegynder
23. januar 2004 - 08:25 #9
OK - men så tak for hjælpen
Avatar billede clausjul Nybegynder
04. februar 2004 - 13:59 #10
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester