18. februar 2003 - 14:53Der er
15 kommentarer og 2 løsninger
Sortering af Array
Hej
Jeg har et Array som ser således ud:
17-2,15-3,16-1
Det første tal definere IDnret på en post i en anden tabel. Tal nr to definere hvilken rækkefølge den skal tage dem i, altså priotet.
Når jeg nu køre mit array igennem, og skriver dem ud en efter en, hvordan får jeg den så til at tage dem i rigtig række følge. Altså 1 først, og så 2, og så 3.
Er dette forståeligt, eller skal jeg give en bedre forklaring ?
Der gives kun point hvis jeg får det til at virke !
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Forslag: Er det muligt for dig at bytte rundt på rækkefølgen af de to tal? Når du ønsker at sortere efter den SIDSTE del af teksten, bliver du nødt til at lave en masse ekstra benarbejde, for at få lavet sorteringen som du gerne vil have den, men hvis du derimod bytter rundt på dem, kan du istedet lave en regulær sortering. Helt let bliver det hvis du tilmed laver det som 002-17,003-15,001-16 da der så bare skal laves en regulær sortering på felterne.
Så skal du "bare" implementere en eller anden sorterings-algoritme. Bubblesort. Quicksort. Whatever. Jeg vil dog til enhver tid anbefale quicksort frem for bubblesort. ;-)
Det lyder som, du er ved at rode dig ud i noget, der kan laves 10 gange lettere. Hvad helt præcist henviser du til i din kommaseparerede streng? Er "17-2" et identifikationsnummer af et bestemt navn i den anden tabel?
Jeg lavede det godt nok som bubblesort..... Algoritmen kræver dog at prioriteten ikke bliver 2 cifret, gør den det skal der laves lidt ændringer..
Nedenfor er mit eksempel og svar: <% dim arrayData, tmp, swapped swapped = false tmp = "" arrayData = "17-2,15-3,16-1,19-5,20-6,2-1" arrayData = Split(ArrayData,",")
do swapped = false for y = 0 to ubound(arrayData)-1 if cint(right(arrayData(y),1)) > cint(right(arrayData(y+1),1)) then tmp = arrayData(y) arrayData(y) = arrayData(y+1) arrayData(y+1) = tmp swapped = true end if Next loop while swapped %>
Dette script tager også flerciffrede prioriteter. Skulle prioriteten på to elementer være ens (ved ikke, om det kan ske) sorteres disse efter første ciffer. Kan dette ikke ske, kan du slette de to sidste if'er:
<script language="jscript" runat="server"> var arr = new Array("17-2", "15-3", "16-10", "19-5", "20-6", "2-103", "2-10", "2-2");
function mySort( a, b ) { a = a.split("-"); if (a[1].length<2) a[1] = "0"+a[1]; b = b.split("-"); if (b[1].length<2) b[1] = "0"+b[1]; if ( a[1]<b[1] ) return -1; if ( a[1]>b[1] ) return 1; if ( a[0]>b[0] ) return -1; if ( a[0]<b[0] ) return 1; return 0; }
Takker ;o) Lige en enkelt lille ting: Laver du noget med arrays, kan det godt betale sig at skrive det i JScript. VBScript er temmelig håbløst til at håndtere arrays. Der er himmelvid forskel i performance på de to sprog :) /mvh
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.