Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:18 Der er 31 kommentarer og
1 løsning

array move

Hvis nu jeg har et array med følgende:

1
2
3
4
5


kan man så ikke push'e det eller noget så med noget kode er det derefter

2
3
4
5
1

og der efter

3
4
5
1
2

osv...???
Avatar billede medions Nybegynder
16. juli 2003 - 13:24 #1
Nej.
Du er nødt til at kører det igennem en lykke og så sætte dem op på forskellige måder!

Men er det et Randomsystem du kiggerefter da?

//>Rune
Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:26 #2
nej... Det er fordi jeg har det sådan her

1/1/2003

test1
test2
test3
test4
test5

og efter hverdag skal den så pushe det 1 tand så

2/1/2003
test2
test3
test4
test5
test1


osv...
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 13:31 #3
Hvad med at beregne det ud fra datoen - hvad er systemet?
Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:33 #4
der er ikke noget system, som sådan....

str_period_start = rs("str_period_start")
str_period_stop = rs("str_period_stop")

run_period = str_period_start
movecount = 0
do
movecount = movecount + 1

run_period = DateAdd("d", 1, run_period)

loop until run_period = str_period_stop



Og ved hvert loop skal den rykke array'et 1 tand... forstår du?
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 13:35 #5
Det der med at rykke.... Hvorfor kan du ikke bare rykke en variabel,
der bestemmer positionen: 0, 1, 2, 3, 4, og så igen 0, 1, ....
Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:36 #6
hmmmmm, tjooo, det har du jo rart i... Jeg prøver lige noet.
Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:47 #7
jeg kan sku ikke lige finde ud af det.

Kan du prøve at bakse noget sammen?
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 13:50 #8
Sagtens - jeg skal bare forstå hvad det er du vil ;)
Avatar billede dd_ns Nybegynder
16. juli 2003 - 13:52 #9
okay... skal jeg prøve at forklare det igen?
Avatar billede nmh Nybegynder
16. juli 2003 - 14:09 #10
Du kan putte det over i en streng med en join ordre. Der efter kan du så lave flytningen på strengen (det første felt fjernes) og tilføjes i enden af strengen.
Derefter bruges en split ordre til at lave et nyt array.

s=join(A,",")
lav ændringer på s.
B skal være erklæret blot som dim B
B=split(s,"'")
Avatar billede nmh Nybegynder
16. juli 2003 - 14:10 #11
ups: B=split(s,",")
Avatar billede dd_ns Nybegynder
16. juli 2003 - 14:11 #12
DEt fatter jeg minus af det der nmh...
Avatar billede nmh Nybegynder
16. juli 2003 - 14:18 #13
Jeg prøver igen.
Hvis A har indholdet 1 2 3 4 5

så vil join(A) være strengen "1,2,3,4,5"
s=mid(join(A),3) nu er s="2,3,4,5"
s=s & & "," & A(0)
Nu er s strengen "2,3,4,5,1"
B=split(s,",")
Nu er indeholder B 2 3 4 5 1
Avatar billede nmh Nybegynder
16. juli 2003 - 14:20 #14
ups: s=mid(join(A,","),3)
Avatar billede dd_ns Nybegynder
16. juli 2003 - 14:21 #15
prøv med den her

server_array inde holder arrayt...

Og så lav et uden kommentare... Jeg fatter minus
Avatar billede nmh Nybegynder
16. juli 2003 - 14:24 #16
Ok. Vent lidt.
Avatar billede nmh Nybegynder
16. juli 2003 - 14:35 #17
Gem nedenstående lille vbs-program i en fil med f.eks. navnet test.vbs.

dim B, A(4)
for i=0 to 4
  A(i)=i+100
next
s=join(A,",")
msgbox S
i=Instr(s,",")
s=mid(s,i+1)& "," & A(0)
msgbox S
MsgBox B(0)
MsgBox B(4)
Når du klikker på den vil den først udskrive 100,101,102,103,104
derefter udskrives
102,102,103,104,101
og til sidst værdien af B(0) og B(4)
B er altså blevet til 101 102 103 104 100

Er det ikke det du ønsker?
Avatar billede nmh Nybegynder
16. juli 2003 - 14:57 #18
Hvis du vil have det i en funktion ser det således ud:

Option Explicit
Dim A(4),i, B
function Forskyd(A)
  dim i,s,B
  s=join(A,",")
  i=Instr(s,",")
  s=mid(s,i+1) & "," & A(0)
  forskyd=split(s,",")
end function
for i=0 to 4
  A(i)=i+100
next
B=forskyd(A)
msgbox B(0) & " , " & B(4)
Avatar billede dd_ns Nybegynder
16. juli 2003 - 15:00 #19
Når det køre i et loop, siger den fejl, efter første loop
Avatar billede nmh Nybegynder
16. juli 2003 - 15:10 #20
Nu skaber jeg arryet A på samme måde som forskyd(A) skabes.
Så virker det. Det ser således ud.

Option Explicit
Dim A,i, B,t
function Forskyd(A)
  dim i,s,B
  s=join(A,",")
  i=Instr(s,",")
  s=mid(s,i+1) & "," & A(0)
  forskyd=split(s,",")
end function
t="100,101,102,103,104"
A=split(t,",")
A=forskyd(A)
A=forskyd(A)
A=forskyd(A)
msgbox A(0) & " , " & A(4)
Avatar billede dd_ns Nybegynder
16. juli 2003 - 15:11 #21
jeg lavede lidt om i din, så nu virker det... tak... vil du have point?
Avatar billede nmh Nybegynder
16. juli 2003 - 15:13 #22
Ja tak.
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 15:23 #23
Du er ikke interesseret i lige at forklare hvad du skal bruge det
til, og få en simplere og hurtigere løsning?
Avatar billede nmh Nybegynder
16. juli 2003 - 15:27 #24
her er en version, der er mere "normal"
Avatar billede nmh Nybegynder
16. juli 2003 - 15:30 #25
Option Explicit
dim A(4),i
sub forskyd(A)
  dim n,B
  n=Ubound(A)
  redim B(n)
  B=A
  for i=0 to n-1
    A(i)=B(i+1)
  next
  A(n)=B(0)
end sub

for i=0 to 4
  A(i)=i+100
next
forskyd A
forskyd A
forskyd A
Msgbox A(0) & " , " & A(4)
Avatar billede nmh Nybegynder
16. juli 2003 - 15:50 #26
Jeg bliver ved. Versionen med join og split er nok den hurtigste for store tabeller. Den sidste version blev unødigt kompliceret. Her er den simpleste vil jeg tro (men jeg håber da at erikjacobsen vil komme med et forslag, der måske er endnu bedre):
option explicit
dim A(4),i
sub forskyd(A)
  dim i,n,x
  n=Ubound(A)
  x=A(0)
  for i=0 to n-1
    A(i)=A(i+1)
  next
  A(n)=x
end sub
for i=0 to 4
  A(i)=i+1
next
forskyd A
forskyd A
forskyd A
msgbox A(0) & A(1) & A(2) & A(3) & A(4)
Avatar billede nmh Nybegynder
16. juli 2003 - 19:31 #27
Nu har jeg undersøgt hastigheden af de forskellige metoder.
Den sidste er den bedste. Ofte giver split og join funktionerne meget hurtige håndteringer af tabeller, men i dette tilfælde går det langsommere end den helt simple direkte metode.
(for tabeller med dimension 20000 er der en faktor 2 til forskel)
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 19:39 #28
Jeg skal gerne komme med et forslag, hvis spørgeren kan få mig til at
forstå hvad han skal bruge det til ;)
Avatar billede nmh Nybegynder
16. juli 2003 - 19:49 #29
erikjakobsen>Brugen er vel ikke så afgørende, og det er vel interessant i sig selv at kunne "rotere" indholdet i en tabel på en effektiv måde
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 20:07 #30
Hvis jeg gætter korrekt, så skal der ikke flyttes en tøddel i det array *g*
Men skal jeg give en løsning, gider jeg kun hvis mit gæt er korrekt.
Avatar billede nmh Nybegynder
16. juli 2003 - 20:14 #31
OK, så du kender altså ikke en særlig hurtig måde faktisk at få "roteret" en gang til venstre.
Avatar billede erikjacobsen Ekspert
16. juli 2003 - 20:17 #32
Det du laver, nmh, ser såmænd ganske fornuftigt ud, hvis det der skal
flyttes ikke fylder for meget.
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