Avatar billede zakiller Nybegynder
11. november 2010 - 14:26 Der er 12 kommentarer og
2 løsninger

Kombinations muligheder

Hvordan får man udkrevet alle kombinationer ?

Hvis vi f.eks. forestiller os at vi har følgende variantgrupper med tilhørende varianter:

Størrelse
- Small
- Medium

Farve
- Rød
- Gul

Vaskbar
- Ja
- Nej

Det jeg er interesseret i er at få udkrevet alle de kombinationer som er mulige.

Small - Rød - Ja
Small - Rød - Nej
Small - Gul - Ja
Small - Gul - Nej
Medium - Rød - Ja
Medium - Rød - Nej
Medium - Gul - Ja
Medium - Gul - Nej
Avatar billede The Real Yoda Juniormester
11. november 2010 - 14:45 #1
Det skulle være simpelt

Nedenstående er ikke testet, men heller ik det mest komplicerede.. men det skulle virke


storrelse = "Small,Medium"
farve = "Rød,Gul"
Vaskbar = "Ja,Nej"

storrelser = split(storrelse,",")
farver=split(farve,",")
vaskbare = split(vaskbar,",")

for t1=lbound(storrelser) to ubound(storrelser)
  for t2=lbound(farver) to ubound(farver)
    for t3=lbound(vaskbare) to ubound(vaskbare)
      response.write "<br>"&storrelser(t1)&" - "&farver(t2)&" - "&vaskbare(t3)
    next
  next
next
Avatar billede mortvader Nybegynder
11. november 2010 - 14:46 #2
dim str,farv,vask

str=split("Small,Medium",",")
farv=split("Rød,Gul",",")
vask=split("Ja,Nej",",")

for s=lbound(str) to ubound(str)
  for f=lbound(farv) to ubound(farv)
    for v=lbound(vask) to ubound(vask)
      response.write str(s)&" - "&farv(f)&" - "&vask(v)&"<br>"
    next
  next
next


(have fun) :D
Avatar billede mortvader Nybegynder
11. november 2010 - 14:47 #3
nå, lol.. sorry :D
Avatar billede The Real Yoda Juniormester
11. november 2010 - 14:49 #4
sku ha været et svar :)
Avatar billede zakiller Nybegynder
11. november 2010 - 15:00 #5
Tak for de fine svar,

Det lader jo til at være lige ud af landevejen.

Men hvad så hvis antallet af variantergrupper er dynamisk? Nogen gange vil der måske være 2 grupper, andre gange 4 ... Nogen der kan komme på en løsning til dette?
Avatar billede mortvader Nybegynder
11. november 2010 - 15:06 #6
Samme script, bare fyld mere i data-strengene:

str=split("Small,Medium,XL,XXL,MEGA",",")
farv=split("Rød,Gul,Blå,Grøn",",")
vask=split("Ja,Nej,Måske",",")

for s=lbound(str) to ubound(str)
  for f=lbound(farv) to ubound(farv)
    for v=lbound(vask) to ubound(vask)
      response.write str(s)&" - "&farv(f)&" - "&vask(v)&"<br>"
    next
  next
nex
Avatar billede zakiller Nybegynder
11. november 2010 - 15:13 #7
Hmmm ...

Jeg tænker på, at der ville kunne være en kombination der kun har str, farv, og een der har str, farv, vask, kvalitet, f.eks. Men disse grupper skulle gerne kunne loopes dynamisk ... Hvis du forstår?

Altså en udvidelse af "For" loopet og ikke arrayet med options ...

Giver det mening?
Avatar billede mortvader Nybegynder
11. november 2010 - 15:22 #8
Altså du kan i hvert fald tømme en array, og det vil køre uden problemer.

Men hvis du vil have flere arrays med, kan man bare tilføje dem til scriptet, og så lade dem være tomme i de tilfælde hvor det skal være sådan.

Hvis jeg forstår... ? :)
Avatar billede The Real Yoda Juniormester
11. november 2010 - 15:34 #9
garanteret man kan men det bliver vist noget langhåret noget..

ville også mene det var sikrest at lave det så du har kodet loopet for max antal variant typer, og så bare efterlader dem tomme hvor du ikke skal bruge det
Avatar billede zakiller Nybegynder
11. november 2010 - 15:41 #10
Det prøver jeg lige ...
Avatar billede zakiller Nybegynder
11. november 2010 - 15:54 #11
OK, hvis et jeg tømmer et array bliver der jo slet ikke udskrevet noget ... hmmm ...
Avatar billede ksoren Nybegynder
12. november 2010 - 12:27 #12
Lidt mere dynamisk:

Sub ListAll(index, s, byref a)
    Dim i, s2

    If index > UBound(a) Then
        Response.Write "<br>"
        Exit Sub
    End If

    For i=0 To UBound(a(index)(1))
        s2 = s & a(index)(1)(i)

        If index = UBound(a) Then
            Response.Write s2
        End If

        ListAll index+1, s2 & " - ", a
    Next
End Sub

a = Array( _
    Array("Størrelse", Array("Small", "Medium")), _
    Array("Farve", Array("Rød", "Gul")), _
    Array("Vaskbar", Array("Ja", "Nej")))

ListAll 0, "", a
Avatar billede ksoren Nybegynder
12. november 2010 - 13:44 #13
Kan i øvrigt simplificeres til:

Sub ListAll(index, s, byref a)
    Dim i, s2

    For i=0 To UBound(a(index)(1))
        s2 = s & a(index)(1)(i)

        If index = UBound(a) Then
            Response.Write s2 & "<br>"
        Else
            ListAll index+1, s2 & " - ", a
        End If
    Next
End Sub
Avatar billede zakiller Nybegynder
13. december 2010 - 17:27 #14
Tak for svar
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