|
| soter et array Fra : pepss |
Dato : 26-09-04 21:36 |
|
hejsa ng
jeg har et array med nogle tal som jeg gerne vil ha sorteret efter styrelse.
f.eks. 5,9,1,6,7,4 skal blive til 1,4,5,6,7,9
hvordan gør man det?
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
terje (27-09-2004)
| Kommentar Fra : terje |
Dato : 27-09-04 00:57 |
|
pepss wrote
> hejsa ng
>
> jeg har et array med nogle tal som jeg gerne vil ha sorteret efter styrelse.
> f.eks. 5,9,1,6,7,4 skal blive til 1,4,5,6,7,9
> hvordan gør man det?
For eksempel:
Dim arr, returnArr, i
arr = Array(1, 2, 7, 4, 5, 11)
'arr = Array("a", "b", "å", "d", "t", "s")
returnArr = BubbleSort(arr)
For i = 0 To UBound(returnArr)
Response.Write returnArr(i) & "<br>"
Next
Function BubbleSort(arr)
Dim i, j, iLow, iMax, iTmp
iLow = LBound(arr)
iMax = UBound(arr)
For i = iLow To iMax - 1
For j = iLow To iMax - i - 1
If arr(j) > arr(j + 1) Then
iTmp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = iTmp
End If
Next
Next
BubbleSort = arr
End Function
| |
pepss (27-09-2004)
| Kommentar Fra : pepss |
Dato : 27-09-04 20:30 |
|
"terje" skrev
> pepss wrote
> > jeg har et array med nogle tal som jeg gerne vil ha sorteret efter
styrelse.
> > f.eks. 5,9,1,6,7,4 skal blive til 1,4,5,6,7,9
> > hvordan gør man det?
>
> For eksempel:
[snip kode]
rigtig mange tak! det virker fint ny skal jeg bare finde ud af hvorfor
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
pepss (27-09-2004)
| Kommentar Fra : pepss |
Dato : 27-09-04 21:18 |
|
"terje" skrev
[snip noget kode]
> arr = Array(1, 2, 7, 4, 5, 11)
jeg falt lige over denn her... jeg kan godt for stå meningen med
Array(noget) men hvad er det lige helt den gør?
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
terje (28-09-2004)
| Kommentar Fra : terje |
Dato : 28-09-04 01:02 |
|
pepss wrote
>>arr = Array(1, 2, 7, 4, 5, 11)
>
>
> jeg falt lige over denn her... jeg kan godt for stå meningen med
> Array(noget) men hvad er det lige helt den gør?
Mener du hva funksjonen Array gjør? Den ganske enkelt sier at en liste
med verdier er å oppfatte som datatypen array. I vbscript gir Array
funksjonen deg en endimensjonal liste med Varianter som henger sammen i
fastsatt rekkefølge og som du kan fylle med hvilken datatype du vil.
Les mer om dette i VBScript Language Reference:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsfctarray.asp
http://www.devguru.com/Technologies/vbscript/quickref/array.html
Men normalt vil du ønske å bruke en dynamisk array, altså en som ikke
har en fastsatt lengde og der dataene hele tiden skifter, slik de gjør i
en database. Dette er en array av en helt annen type enn den som
Array-funksjonen gir deg. Du kan f. eks. bruke GetRows metoden som
returnerer en fiks ferdig todimensjonal recordset array (og som er
veldig rask) omtrent slik:
Dim arr, i, j
arr = rs.GetRows()
For i = 0 To UBound(arr, 2)
For j = 0 To UBound(arr, 1)
Response.Write arr(j, i) & vbCrLf
Next
Next
terje
| |
pepss (28-09-2004)
| Kommentar Fra : pepss |
Dato : 28-09-04 08:43 |
|
"terje" skrev
> pepss wrote
>
> >>arr = Array(1, 2, 7, 4, 5, 11)
> >
> >
> > jeg falt lige over denn her... jeg kan godt for stå meningen med
> > Array(noget) men hvad er det lige helt den gør?
>
> Mener du hva funksjonen Array gjør? Den ganske enkelt sier at en liste
> med verdier er å oppfatte som datatypen array. I vbscript gir Array
> funksjonen deg en endimensjonal liste med Varianter som henger sammen i
> fastsatt rekkefølge og som du kan fylle med hvilken datatype du vil.
som jeg forstår skulle det være det samme som:
tal = 1 & "," & 2 & "," & 3 & "," & 4 & "," & 5
arrtal = Split(tal,",")
eller er det mig det ikke helt forstår det?
når jeg prøver den kode jeg fik af dig virker det fint men jeg kan ikke få
det til at virke sammen med min anden kode.
altså det jeg er ved at lave er et poker spil. til det har jeg en Function
som finder nogle tilfældige kort:
Function rndkort()
kort1 = int(4 * rnd) + 1 & int(13 * rnd) + 1
kort2 = int(4 * rnd) + 1 & int(13 * rnd) + 1
kort3 = int(4 * rnd) + 1 & int(13 * rnd) + 1
kort4 = int(4 * rnd) + 1 & int(13 * rnd) + 1
kort5 = int(4 * rnd) + 1 & int(13 * rnd) + 1
'plus noget mere som gør at man ikke kan få samme kort 2 gang
rndkort = kort1 & "," & kort2 & "," & kort3 & "," & kort4 & "," & kort5
End Function
så vil jeg gerne sortere kortene når de skal vises til spilleren. det prøver
jeg at gøre på denne måde:
arr = Array(rndkort())
returnArr = BubbleSort(arr)
For i = 0 To UBound(returnArr)
Response.Write returnArr(i)
Next
men det bliver de ikke sorteret af....?
p.s. for at gøre det mere besværligt er kortenes tal bygget op på denne
måde:
f.eks. 13 er hjerter 3 hvor 1 er = hjerter og 3 er så for en 3'er
312 er spar dame hvor 3 er spar og 12 er en dame
jeg vil så gerne have at de bliver Sorteret på den måde at der ikke bliver
taget hensyn til vilken farve de har.
håber det er til at forstå og jeg ikke spørger for meget
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
terje (28-09-2004)
| Kommentar Fra : terje |
Dato : 28-09-04 15:45 |
|
pepss wrote
> som jeg forstår skulle det være det samme som:
> tal = 1 & "," & 2 & "," & 3 & "," & 4 & "," & 5
> arrtal = Split(tal,",")
>
> eller er det mig det ikke helt forstår det?
Ja, her lager du i prinsippet den samme array uten å bruke Array
funksjonen. Det kan godt være at vbscript internt behandler dette på
forskjellige måter, men det trenger ikke vi bry oss om her. Det er en
string array, selv om du blander tall og stringer, og da er det greit å
gjøre dette eksplisitt:
arr = CStr(1 & "," & 2 & "," & 3 & "," & 4 & "," & 5)
> altså det jeg er ved at lave er et poker spil. til det har jeg en Function
> som finder nogle tilfældige kort:
[......]
> så vil jeg gerne sortere kortene når de skal vises til spilleren. det prøver
> jeg at gøre på denne måde:
>
> arr = Array(rndkort())
> returnArr = BubbleSort(arr)
> For i = 0 To UBound(returnArr)
> Response.Write returnArr(i)
> Next
Det som skjer her er at dine tall kun sorteres på første siffer, og når
tallene er f. eks. 1, 4, 11 så blir resultatet: 1, 11, 4
Disse sorteres så vidt jeg vet etter Decimal verdien til det *første*
tegnet. Husk at dette er en string array. Hva skjer dersom du
konverterer dette til f. eks. Integers? Se endringen i BubbleSort koden
under:
Dim i, arr
arr = rndkort
arr = Split(arr, ",")
arr = BubbleSort(arr)
For i = 0 To UBound(arr)
Response.Write arr(i) & "<br>"
Next
Function BubbleSort(arr)
Dim i, j, iLow, iMax, iTmp
iLow = LBound(arr)
iMax = UBound(arr)
For i = iLow To iMax - 1
For j = iLow To iMax - i - 1
If CInt(arr(j)) > CInt(arr(j + 1)) Then
iTmp = (arr(j))
arr(j) = arr(j + 1)
arr(j + 1) = iTmp
End If
Next
Next
BubbleSort = arr
End Function
Function rndkort()
Dim kort1, kort2, kort3, kort4, kort5
kort1 = Int(4 * Rnd) + 1 & Int(13 * Rnd) + 1
kort2 = Int(4 * Rnd) + 1 & Int(13 * Rnd) + 1
kort3 = Int(4 * Rnd) + 1 & Int(13 * Rnd) + 1
kort4 = Int(4 * Rnd) + 1 & Int(13 * Rnd) + 1
kort5 = Int(4 * Rnd) + 1 & Int(13 * Rnd) + 1
'plus noget mere som gør at man ikke kan få samme kort 2 gang
rndkort = CStr(kort1 & "," & kort2 & "," & kort3 & "," & kort4 &
"," & kort5)
End Function
Prøv dette
terje
| |
pepss (29-09-2004)
| Kommentar Fra : pepss |
Dato : 29-09-04 12:28 |
|
"terje" skrev
> pepss wrote
>
>> som jeg forstår skulle det være det samme som:
>> tal = 1 & "," & 2 & "," & 3 & "," & 4 & "," & 5
>> arrtal = Split(tal,",")
>>
>> eller er det mig det ikke helt forstår det?
>
> Ja, her lager du i prinsippet den samme array uten å bruke Array
> funksjonen. Det kan godt være at vbscript internt behandler dette på
> forskjellige måter, men det trenger ikke vi bry oss om her. Det er en
> string array, selv om du blander tall og stringer, og da er det greit å
> gjøre dette eksplisitt:
> arr = CStr(1 & "," & 2 & "," & 3 & "," & 4 & "," & 5)
okay det havde jeg ikke lige tænkt på!
>> altså det jeg er ved at lave er et poker spil. til det har jeg en
>> Function
>> som finder nogle tilfældige kort:
>
> [......]
>
>> så vil jeg gerne sortere kortene når de skal vises til spilleren. det
>> prøver
>> jeg at gøre på denne måde:
>>
>> arr = Array(rndkort())
>> returnArr = BubbleSort(arr)
>> For i = 0 To UBound(returnArr)
>> Response.Write returnArr(i)
>> Next
>
> Det som skjer her er at dine tall kun sorteres på første siffer, og når
> tallene er f. eks. 1, 4, 11 så blir resultatet: 1, 11, 4
>
> Disse sorteres så vidt jeg vet etter Decimal verdien til det *første*
> tegnet. Husk at dette er en string array. Hva skjer dersom du konverterer
> dette til f. eks. Integers? Se endringen i BubbleSort koden under:
rigtig mange tak skal du ha! nu begynder jeg også at forstå hvad der sker!
--
Pepss
Den ordblinde der prøver at blive webdesigner
Fræk frækkere www.cafe-flirt.dk
De frække noveller www.novelle.cafe-flirt.dk
| |
|
|