Avatar billede gadebarnet Nybegynder
13. januar 2004 - 08:45 Der er 7 kommentarer og
1 løsning

sortering af array

Jeg har det her array

myarray = "david,pedersen,anders,ost"

Hvordan kan jeg sortere det alfabetisk, så det ville hede sig:

myarray = "anders,david,ost,pedersen"
Avatar billede eagleeye Praktikant
13. januar 2004 - 08:52 #1
En boblesortering på et array:

<%

  d = Split("david,pedersen,anders,ost", ",")

  changed=true
  do while changed
    changed=false
    for i=lbound(d) to ubound(d)-1
      if d(i)>d(i+1) then
        tmp=d(i):d(i)=d(i+1):d(i+1)=tmp
        changed=true
      end if
    next
  loop

  for i=lbound(d) to ubound(d)
    response.write d(i) & "<br>"
  next
%>
Avatar billede gadebarnet Nybegynder
13. januar 2004 - 08:56 #2
Når jeg prøver det du har lavet der, med mit rigtige array, så kommer der dubletter...

Mit rigtige array ser sådan her ud ført sortering:

_Pretest,Accounts,ASchedule,Currency,PaymentTolerance,changelog,Intercompany,Dimensions,ReminderFinChar,PmtOnCM,AddCurrency,VAT,Apply,Bank,Budget,GL,Periods,Consolidation

Og efter:

ASchedule
ASchedule
Accounts
Accounts
AddCurrency
Apply
Bank
Budget
Consolidation
Currency
Dimensions
GL
Intercompany
PaymentTolerance
Periods
PmtOnCM
ReminderFinChar
VAT
_Pretest
_Pretest
changelog


???
Avatar billede eagleeye Praktikant
13. januar 2004 - 09:08 #3
Det forstår jeg ikke du sikker på de dubletter ikke er der to gange i arrayet?

Alternativt så prøv denne:


  A = Split("david,pedersen,anders,ost", ",")

  gap = ubound(A)
  OK = True
  While OK
    'You can try other values, but 1.33 seems to be the best
    gap= Int(gap/1.33)
    If gap < 1 Then gap = 1
    OK = (gap <> 1)
    For i = 0 To M - gap
      j = i + gap
      If A(i) > A(j) Then
        x = A(i)
        A(i) = A(j)
        A(j) = x
        OK = True
      End If
    Next
  Wend
Avatar billede eagleeye Praktikant
13. januar 2004 - 11:16 #4
Det skal nok være sådan her:

  A = Split("david,pedersen,anders,ost", ",")

  M=ubound(A)
  gap = M
  OK = True
  While OK
    'You can try other values, but 1.33 seems to be the best
    gap= Int(gap/1.33)
    If gap < 1 Then gap = 1
    OK = (gap <> 1)
    For i = 0 To M - gap
      j = i + gap
      If A(i) > A(j) Then
        x = A(i)
        A(i) = A(j)
        A(j) = x
        OK = True
      End If
    Next
  Wend
Avatar billede gadebarnet Nybegynder
13. januar 2004 - 11:29 #5
Okay, det virker, men den fjerne ikke hvis der er dubletter...???
Avatar billede eagleeye Praktikant
13. januar 2004 - 17:46 #6
det rigtigt ;)
Avatar billede gadebarnet Nybegynder
13. januar 2004 - 17:49 #7
Kan du så ikke lige lave så den også gør det?
Avatar billede eagleeye Praktikant
13. januar 2004 - 21:43 #8
Man kan lave det når man har strengen med teksten før sorteringen sådan her:


str = "david,david,pedersen,anders,ost"
arr = Split(str,",")
tmp = ","
for i = lbound(arr) to ubound(arr)
  if inStr(1,tmp,","&arr(i)&",",1) = 0 then tmp = tmp & arr(i) & ","
next
str = mid(tmp,2,len(tmp)-2)

'Sorter her
  A = Split(str, ",")

  M=ubound(A)
  gap = M
  OK = True
  While OK
    'You can try other values, but 1.33 seems to be the best
    gap= Int(gap/1.33)
    If gap < 1 Then gap = 1
    OK = (gap <> 1)
    For i = 0 To M - gap
      j = i + gap
      If A(i) > A(j) Then
        x = A(i)
        A(i) = A(j)
        A(j) = x
        OK = True
      End If
    Next
  Wend
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