|
| array og key Fra : Bo Rattenborg |
Dato : 19-02-02 11:39 |
|
Hvis nu man har et array f.eks:
element['a'] = 1;
element['b'] = 2;
element['c'] = 3;
element['d'] = 4;
element['e'] = 5;
hvordan kan man så lave en løkke der udskriver de forskellige keys for
element ?
altså:
a, b, c, d, e
Bo
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 13:20 |
|
Hej,
Jeg læser dit indlæg som du har et Array bestående af nogle værdier som du
gerne vil gennemløbe og dernæst skrive ud.
At lave en løkke der gennemløber Array'et er ikke noget problem. Men
problemet ligger nok nærmest i, at Flash 5.0 har fire print-funktioner;
print(), printAsBitmap(), printAsBitMapNum samt printNum() og at alle disse
fire funktioner sender indholdet af frame(s) til printeren på forskellig
vis, enten hele tidslinien eller enkelte frames label-markeret med #P.
Jeg tror ikke din problematik kan løses i Flash 5.0 med mindre man på en
eller anden måde kan forestille sig et Array bestående af et antal
frames????
Venlig hilsen
Lars
"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> skrev i en meddelelse
news:a4t9re$8ra$1@sunsite.dk...
> Hvis nu man har et array f.eks:
>
> element['a'] = 1;
> element['b'] = 2;
> element['c'] = 3;
> element['d'] = 4;
> element['e'] = 5;
>
> hvordan kan man så lave en løkke der udskriver de forskellige keys for
> element ?
>
> altså:
> a, b, c, d, e
>
> Bo
>
>
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 13:27 |
|
> Jeg læser dit indlæg som du har et Array bestående af nogle værdier som du
> gerne vil gennemløbe og dernæst skrive ud.
ok, jeg formulerede mig måske ikke så klart. Jeg ønsker ikke decideret at
skrive / print / eller udskrive, det jeg vil er blot at få adgang til key i
array[key].
f.eks. noget lignende:
for(i<0; if(i<array.lenght)) {
key = getkey_eller_noget_lignende(array[i]);
trace(key add '\n');
}
hmm jeg håber at ovenstående er en bedre forklaring.
Bo
___
www.rattenborg.com
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 14:05 |
|
Jeg tror du næsten selv har det.
Du kan få fat i /tildele et arrayelement til en variabel på den måde du
skitserer der:
var = array[i];
F.eks.:
var udtraek;
var navnList = new Array(4);
navnList = ["Lars", "Ole", "John", "Ulla"];
udtraek = navnList[i] / navnList[2]
trace(udtraek) giver John
Håber du kan bruge det til noget, eller skriv igen.
Venlig hilsen
Lars
> ok, jeg formulerede mig måske ikke så klart. Jeg ønsker ikke decideret at
> skrive / print / eller udskrive, det jeg vil er blot at få adgang til key
i
> array[key].
>
> f.eks. noget lignende:
>
> for(i<0; if(i<array.lenght)) {
> key = getkey_eller_noget_lignende(array[i]);
> trace(key add '\n');
> }
>
> hmm jeg håber at ovenstående er en bedre forklaring.
>
> Bo
>
> ___
> www.rattenborg.com
>
>
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 14:21 |
|
hmm måske misforstår jeg noget, ellers forklarer jeg mig stadig ikke godt
nok
> var udtraek;
> var navnList = new Array(4);
> navnList = ["Lars", "Ole", "John", "Ulla"];
> udtraek = navnList[i] / navnList[2]
>
> trace(udtraek) giver John
jo men det jeg ville have fat i er ikke f.eks. lars, men den 'key' han står
under... altså
personer = new Array();
personer['person1'] = 'Lars';
personer['person2'] = 'Ole';
personer['person1'] = 'John';
personer['person1'] = 'Ulla';
det jeg gerne vil, er så at f.eks. at kunne trace:
for(i=0; if(i<personer.length); i++) {
key = ?
value = personer[key];
trace(key add ' = ' add value add '\n');
}
I PHP ville jeg gøre det sådan:
while(list($key, $value) = each($personer)) {
print $key.' = '.$value.'<BR>';
}
men der er nok ikke til nogen hjælp, men måske kan det underbygge min
forklaring.
Mvh
Bo
___
www.rattenborg.com
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 14:24 |
|
nåå, du mener elementets position/placering i arrayet??
Lars
"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> skrev i en meddelelse
news:a4tjb9$ct5$1@sunsite.dk...
> hmm måske misforstår jeg noget, ellers forklarer jeg mig stadig ikke godt
> nok
>
> > var udtraek;
> > var navnList = new Array(4);
> > navnList = ["Lars", "Ole", "John", "Ulla"];
> > udtraek = navnList[i] / navnList[2]
> >
> > trace(udtraek) giver John
> jo men det jeg ville have fat i er ikke f.eks. lars, men den 'key' han
står
> under... altså
>
> personer = new Array();
> personer['person1'] = 'Lars';
> personer['person2'] = 'Ole';
> personer['person1'] = 'John';
> personer['person1'] = 'Ulla';
>
> det jeg gerne vil, er så at f.eks. at kunne trace:
> for(i=0; if(i<personer.length); i++) {
> key = ?
> value = personer[key];
> trace(key add ' = ' add value add '\n');
> }
>
> I PHP ville jeg gøre det sådan:
> while(list($key, $value) = each($personer)) {
> print $key.' = '.$value.'<BR>';
> }
> men der er nok ikke til nogen hjælp, men måske kan det underbygge min
> forklaring.
>
> Mvh
> Bo
> ___
> www.rattenborg.com
>
>
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 14:33 |
|
> nåå, du mener elementets position/placering i arrayet??
øh, ja hvis det hedder sådan
Bo
___
www.rattenborg.com
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 14:41 |
|
....der findes ingen indbygget metode til at returnere et elements numeriske
placering eller en property der indeholder værdien.
Men er det ikke et spørgsmål om at gennemløbe arrayet indtil du "støder" på
værdien du har som kriterie. For hvert gennem løb tæller du en variabelværdi
op med 1?? Variablen har indgangsværdien 0. Denne variabel værdi må
nødvendigvis have samme værdi som elementets placering i arrayet.
Venlig hilsen
Lars
"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> skrev i en meddelelse
news:a4tk1l$eno$1@sunsite.dk...
> > nåå, du mener elementets position/placering i arrayet??
>
> øh, ja hvis det hedder sådan
>
> Bo
> ___
> www.rattenborg.com
>
>
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 14:53 |
|
> Men er det ikke et spørgsmål om at gennemløbe arrayet indtil du "støder"
på
> værdien du har som kriterie. For hvert gennem løb tæller du en
variabelværdi
> op med 1?? Variablen har indgangsværdien 0. Denne variabel værdi må
> nødvendigvis have samme værdi som elementets placering i arrayet.
hmm det jeg vil bruge det til er at holde styr på noget dynamisk indhold på
en side.
f.eks
mode = new Array();
mode['welcome'] = new Array();
mode['welcome']['menuMain'] = new Array();
mode['welcome']['menuMain']['swf'] = 'swf/welcome_menu_main.swf';
mode['welcome']['menuMain']['elementName'] = 'Hovedmenu';
mode['welcome']['menuMain']['posX'] = 0;
mode['welcome']['menuMain']['posY'] = 100;
mode['welcome']['menuMain']['target'] = 'containerMenuMain';
for så at benytte en for if løkke til at loade de forskellige clips der
tilhører f.eks. mode=welcome.
Det er måske en ret kludret og indvilket måde at styre det på, derfor er jeg
bestemt også åben for andre idéer.
mvh
Bo
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 15:27 |
|
Hej igen Bo,
jeg tror du blander det der kaldes "named elements" sammen med "numbered
elements". Det kan måske være en ide for din side at oprette et array med
"named elements"?? Du kan gøre det på følgende måde:
Den generelle syntaks er:
ArrayNavn.ElementNavn = "indhold"
Specifikt:
var MenuElementer;
MenuElementer = new Array();
MenuElementer.Soeg = "Søg på Site";
MenuElementer.Download = "Download område";
osv...
Nu kan du løbende referere til dine "named elements" på følgende måde:
var MenuReference;
MenuReference = MenuElementer.Download;
Jeg håber det hjælper dig, ellers må vi prøve igen, igen
Venlig hilsen
Lars
"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> skrev i en meddelelse
news:a4tl6m$ikc$1@sunsite.dk...
> > Men er det ikke et spørgsmål om at gennemløbe arrayet indtil du "støder"
> på
> > værdien du har som kriterie. For hvert gennem løb tæller du en
> variabelværdi
> > op med 1?? Variablen har indgangsværdien 0. Denne variabel værdi må
> > nødvendigvis have samme værdi som elementets placering i arrayet.
>
> hmm det jeg vil bruge det til er at holde styr på noget dynamisk indhold
på
> en side.
>
> f.eks
>
> mode = new Array();
> mode['welcome'] = new Array();
> mode['welcome']['menuMain'] = new Array();
>
> mode['welcome']['menuMain']['swf'] = 'swf/welcome_menu_main.swf';
> mode['welcome']['menuMain']['elementName'] = 'Hovedmenu';
> mode['welcome']['menuMain']['posX'] = 0;
> mode['welcome']['menuMain']['posY'] = 100;
> mode['welcome']['menuMain']['target'] = 'containerMenuMain';
>
> for så at benytte en for if løkke til at loade de forskellige clips der
> tilhører f.eks. mode=welcome.
>
> Det er måske en ret kludret og indvilket måde at styre det på, derfor er
jeg
> bestemt også åben for andre idéer.
>
> mvh
> Bo
>
>
>
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 15:48 |
|
Hej Lars
Michael Peo har gjort opmærksom på at flere (alle?) af array metoderne ikke
kan anvendes på named elements, derfor har jeg prøvet at komme op med en ny
idé i mit svar til Michael.
Bo
| |
Lars Kjærsgaard (19-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 19-02-02 15:49 |
|
Fint, så er det vist i gode hænder
Venlig hilsen
Lars
"Bo Rattenborg" <bo.rattenborg@[no spam]mail.dk> skrev i en meddelelse
news:a4todn$sml$1@sunsite.dk...
> Hej Lars
>
> Michael Peo har gjort opmærksom på at flere (alle?) af array metoderne
ikke
> kan anvendes på named elements, derfor har jeg prøvet at komme op med en
ny
> idé i mit svar til Michael.
>
> Bo
>
>
| |
Michael Peo (19-02-2002)
| Kommentar Fra : Michael Peo |
Dato : 19-02-02 15:02 |
|
[...]
> f.eks. noget lignende:
>
> for(i<0; if(i<array.lenght)) {
> key = getkey_eller_noget_lignende(array[i]);
> trace(key add '\n');
> }
[...]
f.eks.:
// kode start ----------------------
for (i=0; i<myArray.length; i++) {
trace (myArray[i]);
}
// kode slut -----------------------
test:
// kode start ----------------------
//Nyt array
myArray = new Array();
myArray = ["den første værdi", "den den anden værdi", "den tredje værdi", "den sidste værdi"];
// Gennemløb myArray
for (i=0; i<myArray.length; i++) {
trace (myArray[i]); // tracer bare for at teste, kan være en hvilken som helst funktion
}
// kode slut -----------------------
/peo
www.bandage.dk
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 14:55 |
|
> f.eks.:
> // kode start ----------------------
> for (i=0; i<myArray.length; i++) {
> trace (myArray[i]);
> }
> // kode slut -----------------------
nej ikke lige det, men se evt. min 'samtale' med Lars
Bo
| |
Michael Peo (19-02-2002)
| Kommentar Fra : Michael Peo |
Dato : 19-02-02 15:42 |
|
Sorry, min fejltagelse.
Der er det lille problem ved at anvende såkaldte "associtive arrays" (altså navngivne elementer i stedet for
nummererede elementer), og det er at ingen af de sædvanlige array-metoder virker, f.eks. push(), pop() osv.
Det er måske muligt at løse problemet med et par selvskrevne funktioner, men som jeg ser det vil den nemmeste
løsning være at bruge "alm." nummererede elementer i dine arrays. Det gør måske tingene lidt sværere at
gennemskue rent kodemæssigt, men meget lettere at arbejde med (gennemløbe, tilføje, osv.)
Er jeg helt galt på den, eller på rette vej nu?
/peo
www.bandage.dk
| |
Bo Rattenborg (19-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 19-02-02 15:45 |
|
> Der er det lille problem ved at anvende såkaldte "associtive arrays"
(altså navngivne elementer i stedet for
> nummererede elementer), og det er at ingen af de sædvanlige array-metoder
virker, f.eks. push(), pop() osv.
>
> Det er måske muligt at løse problemet med et par selvskrevne funktioner,
men som jeg ser det vil den nemmeste
> løsning være at bruge "alm." nummererede elementer i dine arrays. Det gør
måske tingene lidt sværere at
> gennemskue rent kodemæssigt, men meget lettere at arbejde med (gennemløbe,
tilføje, osv.)
>
> Er jeg helt galt på den, eller på rette vej nu?
nej, det kan godt være at det er den vej jeg skal gå. Kunne elementerne evt.
bygges op på denne måde:
welcome = 0;
info=1;
links=2;
menuMain=0;
swf=0;
elementName=1;
posX=2;
posY=3;
target=4;
mode[welcome] = new Array();
mode[welcome][menuMain] = new Array();
mode[welcome][menuMain[swf] = 'swf/welcome_menu_main.swf';
mode[welcome][menuMain[elementName] = 'Hovedmenu';
mode[welcome][menuMain[posX] = 0;
mode[welcome][menuMain[posY] = 100;
mode[welcome][menuMain[target] = 'containerMenuMain';
mon det kunne være en metode, der også ligger vægt på gennemskueligheden af
koden ?
eller er der andre forslag ?
Bo
| |
www.FlashFAQ.dk (20-02-2002)
| Kommentar Fra : www.FlashFAQ.dk |
Dato : 20-02-02 21:17 |
|
> eller er der andre forslag ?
> Bo
Du kunne vælge at bygge det om som et objekt istedet;
function menuMain(swf, elementName, posX, posY, target)
{
this.swf=swf;
this.elementName=elementName;
this.posX=posX
this.posY=posY
this.target=target
}
menu1 = new menuMain("swf/welcome_menu_main.swf", "Hovedmenu",
0,100,"containerMenuMain");
Mvh/M!chael
begin 666 invisible.gif
M1TE&.#EA!0`%`( ``````````"'Y! $`````+ `````%``4```($A(^I6 `[
`
end
| |
Bo Rattenborg (20-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 20-02-02 23:20 |
|
Nu spørger jeg nok lidt dumt, men minder opbjektet ikke en del om associtive
arrays ?
Bo
| |
Michael Peo (21-02-2002)
| Kommentar Fra : Michael Peo |
Dato : 21-02-02 21:53 |
|
Efter at have rodet lidt med problemet med at refferere til associative-arrays, så må jeg sige at M!chael's
løsning virker både tiltalende og åbenbar.
[...]
Nu spørger jeg nok lidt dumt, men minder opbjektet ikke en del om associtive
arrays ?
[...]
tjoo... Der er slående ligheder. Fordelen ved objekterne er (så vidt jeg kan se - har ikke prøvet at lave en
større omgang som denne før) at de er nemmere at refferere til.
Jeg bliver nød til at spørge om hvori fordelen(e) ved at opbygge en side på denne måde består.
/peo
www.bandage.dk
| |
Lars Kjærsgaard (21-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 21-02-02 23:14 |
|
Hej Michael,
jeg håber at kunne give lidt input her. Objekter og Arrays er to vidt
forskellige datastrukturer med hver deres styrker og svagheder. Arrays er
primært god til hurtig håndtering af større datamængder, f.eks. forskellige
sorteringer og deres algoritmer. Objekter derimod, er en del af den Objekt
Orienterede tankegang, hvilket vil sige at et objekt skal kunne tilbyde at
modellere en "ting"/objekt i den virkelige verden som f.eks. en bankkonto i
en bank, en gearkasse i en bil, en postbud i et postadm. system, en last i
et shippingsystem eller en menu i et menusystem. Altså selvstændige logiske
enheder der er kendetegnet ved at have "et liv"/tilbyder noget/udfører
noget - det vil sige bærer nogle data(properties), kan udføre
noget(metoder/functions).
Sikkert det eneste sådan et objekt-orienteret menu, i et objekt-orienteret
menusystem, skal kunne tilbyde er vel at kunne starte den ønskede
funktionalitet eller "udfolde" en undermenu???
Derudover vil jeg langt hellere vedligeholde et objekt-orienteret
menu-system, bestående af logisk opbyggede objekter, end et indforstået,
ulogisk array-baseret system (hvis det kan lade sig gøre), simpelthen p.g.a.
logikken der afspejler virkeligheden.
Jeg indrømmer at jeg er forholdsvis ny i Flash, men jeg kender til
objekt-orienteret programmering fra andre udviklingsmiljøer og principperne
bag, såh ovenstående skulle være god nok!!!
Jeg håber ikke mit input er alt for akademisk forklaret?
Venlig hilsen
Lars
"Michael Peo" <peo@bandage.dk> skrev i en meddelelse
news:a53m2l$2vdo$1@news.cybercity.dk...
> Efter at have rodet lidt med problemet med at refferere til
associative-arrays, så må jeg sige at M!chael's
> løsning virker både tiltalende og åbenbar.
> [...]
> Nu spørger jeg nok lidt dumt, men minder opbjektet ikke en del om
associtive
> arrays ?
> [...]
> tjoo... Der er slående ligheder. Fordelen ved objekterne er (så vidt jeg
kan se - har ikke prøvet at lave en
> større omgang som denne før) at de er nemmere at refferere til.
>
> Jeg bliver nød til at spørge om hvori fordelen(e) ved at opbygge en side
på denne måde består.
>
> /peo
> www.bandage.dk
>
>
>
| |
Bo Rattenborg (22-02-2002)
| Kommentar Fra : Bo Rattenborg |
Dato : 22-02-02 00:11 |
|
> Jeg bliver nød til at spørge om hvori fordelen(e) ved at opbygge en side
på denne måde består.
jeg er gået lidt væk fra det viste eksempel og er nået frem til:
når et punkt i menun vælges startes funktionen loadElements(mode)
hvis så mode f.eks. er velkommen, så:
function elementsLoad(mode) {
if(mode == 'welcome') {
_root.loadStatus = 0;
_root.elements = new Array();
_root.elements[0] = new Array('menu', 'swf/welcome_menu_main.swf', 0, 0,
'containerMenuMain', 1000);
_root.elements[1] = new Array('content', 'swf/welcome_content.swf', 0, 0,
'containerContent', 1000);
elementsLoad.play();
}
klippet elementsLoad kører så i en løkke der tæller antallet af movies i
_root.elements, og handler ud fra de oplysninger der står i f.eks.
_root.elements[1][0], _root.elements[1][1] osv. .....
jeg ved ikke om det er nogen speciel køn / rigtig måde at gøre det på, men
det ser ud til at virke.
Jeg hører gerne hvis I har forslag til at løse det på en bedre måde..
Mvh
Bo
| |
Michael Peo (21-02-2002)
| Kommentar Fra : Michael Peo |
Dato : 21-02-02 13:43 |
|
Efter at have rodet lidt med problemet med at refferere til associative-arrays, så må jeg sige at M!chael's
løsning virker både tiltalende og åbenbar.
[...]
Nu spørger jeg nok lidt dumt, men minder opbjektet ikke en del om associtive
arrays ?
[...]
tjoo... Der er slående ligheder. Fordelen ved objekterne er (så vidt jeg kan se - har ikke prøvet at lave en
større omgang som denne før) at de er nemmere at refferere til.
Jeg bliver nød til at spørge om hvori fordelen(e) ved at opbygge en side på denne måde består.
/peo
www.bandage.dk
| |
Lars Kjærsgaard (21-02-2002)
| Kommentar Fra : Lars Kjærsgaard |
Dato : 21-02-02 12:34 |
|
Hej Michael,
jeg har givet en smule input til diskussionen ang. arrays, men må nok
indrømme at dit objekt-orienterede forslag er det mest elegante. Tingene er
adskilt og meget lette at udbygge og vedligeholde - modularisering det er jo
hvad OOP drejer sig om. Jeg blev noget nysgerrig ang. den sidste af dine
properties på objektet, "target", hvad skal den indeholde, hvad bidrager den
med??
Venlig hilsen
Lars
" www.FlashFAQ.dk" <admin@flashfaq.dk> skrev i en meddelelse
news:cxTc8.1380$Rz2.68622@news010.worldonline.dk...
> > eller er der andre forslag ?
> > Bo
>
> Du kunne vælge at bygge det om som et objekt istedet;
>
> function menuMain(swf, elementName, posX, posY, target)
> {
> this.swf=swf;
> this.elementName=elementName;
> this.posX=posX
> this.posY=posY
> this.target=target
> }
> menu1 = new menuMain("swf/welcome_menu_main.swf", "Hovedmenu",
> 0,100,"containerMenuMain");
>
> Mvh/M!chael
>
>
>
| |
www.FlashFAQ.dk (23-02-2002)
| Kommentar Fra : www.FlashFAQ.dk |
Dato : 23-02-02 08:14 |
|
Jeg blev noget nysgerrig ang. den sidste af dine
> properties på objektet, "target", hvad skal den indeholde, hvad bidrager
den
> med??
Mit eksempel er lavet ud fra Bo's defination på et array, (posten lige før
mit tidligere indlæg) så jeg er ikke helt klar over hvad target refererer
til, men tilsyneladende et sekundær array eller obj indeholdende oplysninger
til nyt vindue
| |
|
|