Avatar billede jens_k Nybegynder
18. februar 2003 - 14:53 Der 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 !

Jens K
Avatar billede sbm Nybegynder
18. februar 2003 - 15:21 #1
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.
Avatar billede sbm Nybegynder
18. februar 2003 - 15:22 #2
Så skal du "bare" implementere en eller anden sorterings-algoritme. Bubblesort. Quicksort. Whatever. Jeg vil dog til enhver tid anbefale quicksort frem for bubblesort. ;-)
Avatar billede jens_k Nybegynder
18. februar 2003 - 15:28 #3
Jeg kan godt bytte rundt på dem, du er lige nødt til at forklare mig hvad forskellen på Quicksoft og Bubblesort er.

Jens K
Avatar billede nozio Nybegynder
18. februar 2003 - 15:29 #4
Hvor kommer dit array fra ? - en database eller ???
Avatar billede jens_k Nybegynder
18. februar 2003 - 15:34 #5
Ja, det står i en Access Database
Avatar billede nozio Nybegynder
18. februar 2003 - 15:36 #6
kan du så ikke klare det i din select - hvordan ser den ud (sql'en) ?
Avatar billede jens_k Nybegynder
18. februar 2003 - 15:41 #7
Der er et felt som hedder Navne:

Og i feltet står der f.eks : 17-2,15-3,16-1

Den henter så fra en anden tabel hvor navnene står i. Og skriver navnene ud i den række følge som den nu skal.

Jeg kan godt bytte rundt på tallene som sbm forslår.

Jens K
Avatar billede oasen Nybegynder
18. februar 2003 - 19:20 #8
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?
Avatar billede jens_k Nybegynder
18. februar 2003 - 19:35 #9
Som sagt er 17 IDet på posten i en anden tabel. 2 betyder at den skal trækkes ud som nr 2.

Jens K
Avatar billede oasen Nybegynder
18. februar 2003 - 19:45 #10
Det eneste korrekte at gøre er at oprette en tabel mere med følgende struktur.
Vi kalder den "tbl1".

ID___________Udtraek
17______________2
15______________3
16______________1

Denne skal relatere til din anden tabel med navnene ("tbl2"). Et udtræk kunne se således ud:

Select tbl2.navn From tbl1 Left Join tbl2 On tbl1.ID = tbl2.ID Order By tbl1.Udtraek Asc
Avatar billede jens_k Nybegynder
18. februar 2003 - 20:02 #11
Det skal ikke laves om. Det skal være i samme tabel, man må da kunne sortere et array.
Avatar billede longshanks Nybegynder
18. februar 2003 - 21:00 #13
Jeg tror godt jeg kan smække en quicksort sammen der kan sortere sådan som du vil have det
Avatar billede longshanks Nybegynder
18. februar 2003 - 22:15 #14
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
%>
Avatar billede olebole Juniormester
20. februar 2003 - 04:52 #15
<ole>

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;
}

arr.sort(mySort);

Response.Write( arr );
</script>

/mvh
</bole>
Avatar billede olebole Juniormester
22. april 2003 - 23:35 #16
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
Avatar billede jens_k Nybegynder
23. april 2003 - 12:39 #17
Jamen det vil jeg da lige huske :)

Mange tak for hjælpen

Jens K
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