Søke gjennom flere lister etter en liste med element [Matla]
Posted: 21/01-2013 23:21
Fikler litt med lister og slikt i matlab, har flere lister lagret i celler og ønsker å finne elementer i disse.
Mer konkret har jeg en lister over eksempelvis brus, en liste er en liste med forkortelser, mens en annen liste er fullt navn. Eksempelvis
Ønsket input og output er vist under
Altså jeg legger inn en liste og får radnummeret. Jeg ønsker og muligheten for å bare legge inn en liste, slik at jeg for eksempel bare kan søke liste1. Hva er den mest elegante måten å gjøre dette på?
Samtidig ønker jeg og å få ut en liste med alt jeg ikke fant.
Jeg har selv skrevet en kode som fungerer en den smerter sjelen min bare jeg tenker på koden.
I korte trekk sjekker jeg om input er av riktig format, og hvor mange lister som tas inn. Her godtar jeg bare 1 eller 2. Så formaterer jeg listene, fjerner mellomrom, store små bokstaver osv. Så tester jeg om strengene er like via ismember funksjonen.
De strengene den ikke fant i første liste, testes i neste liste.
Strenger som failer på begge disse blir sendt inn i en annnen funksjon som sjekker om strengene er innenfor et tegn fra en streng i liste1 eller 2. Det jeg frykter er at alle disse sjekkene gjør koden treg. Og det ville vært raskere å bare søke gjennom strengene og fjærne dobbelgjengere etterpå. Krever det mye ressurer av matlab å fjærne rader fra lister, sammenliknet med å søke gjennom alle sammen?
http://pastebin.com/u36UzXM3
Og hva er raskest av ismember og scrmpi for korte lister av strenger ?
Bruker jeg sistnevnte må jeg jo loope igjennom alle elementene jeg vil søkge etter.
Mer konkret har jeg en lister over eksempelvis brus, en liste er en liste med forkortelser, mens en annen liste er fullt navn. Eksempelvis
Code: Select all
'cola'
'flote'
'blå'
'grønn'
'orange'
'rød'
'gren'
'sprite'
'chili'
'hel'
'melk'
'vann'
Code: Select all
'Coca Cola'
'Fløte'
'Gele Blå'
'Gele Grønn'
'Gele Orange'
'Gele Rød'
'Röses Grenadine'
'Sprite'
'Tabasco'
'Tine Helmelk'
'Tine Melk'
'VATN'
Code: Select all
A = Finn('Fløte,Vann,chilli',Liste1, Liste2)
A = [ 2 12 9 ]
Samtidig ønker jeg og å få ut en liste med alt jeg ikke fant.
Jeg har selv skrevet en kode som fungerer en den smerter sjelen min bare jeg tenker på koden.
I korte trekk sjekker jeg om input er av riktig format, og hvor mange lister som tas inn. Her godtar jeg bare 1 eller 2. Så formaterer jeg listene, fjerner mellomrom, store små bokstaver osv. Så tester jeg om strengene er like via ismember funksjonen.
De strengene den ikke fant i første liste, testes i neste liste.
Strenger som failer på begge disse blir sendt inn i en annnen funksjon som sjekker om strengene er innenfor et tegn fra en streng i liste1 eller 2. Det jeg frykter er at alle disse sjekkene gjør koden treg. Og det ville vært raskere å bare søke gjennom strengene og fjærne dobbelgjengere etterpå. Krever det mye ressurer av matlab å fjærne rader fra lister, sammenliknet med å søke gjennom alle sammen?
http://pastebin.com/u36UzXM3
Og hva er raskest av ismember og scrmpi for korte lister av strenger ?
Bruker jeg sistnevnte må jeg jo loope igjennom alle elementene jeg vil søkge etter.