Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 24-07-2003, 20:44   #1 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Question Array auf identische Einträge auswerten

Hi,

ich würde gerne ein vier Elemente grosses Array auf identische Werte hin untersuchen. Jedes Element enthält Zahlen von 1-7.

Wie bekomme ich analysiert und ausgegeben, ob und wieviel identische vorhanden sind?

ActionScript:
  1. meinResultArray = new Array();
  2.  
  3. for (var i = 0; i < meinAusgangsArray.length; i++) {
  4.         var existing = false;
  5.         for (var j = 0; j < meinResultArray.length; j++)
  6.         if (meinResultArray[j] == meinAusgangsArray[i]) {
  7.                 existing = true;
  8.                 break;
  9.         }
  10.         if (not existing) meinResultArray.push(meinAusgangsArray[i]);
  11. }

...gibt bspw. "der 2. eintrag ist gleich wie der 3. eintrag" aus.

Ich hätte aber gern ausgewertet, ob es dreifache, zweifache, oder sogar eine dreifache Identität in Verbindung mit einem bestimmten Wert des nicht-identischen Elements gibt!

Hat einer von euch eine Idee, wie ich da am besten rangehen könnte?

Geändert von cyberjunk (24-07-2003 um 20:55 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 24-07-2003, 20:55   #2 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Das kannst du mit einem zweiten Array erreichen, in dem du die Werte des ersten Arrays als Index benutzt und die entsprechenden Einträgt hochzählst.

ActionScript:
  1. a1 = new Array(1,2,3,2,3,5,4,2,2,3,5,6,7,4,3,2,3,0,4,5);
  2. a2 = new Array();
  3. for( var i in a1){
  4.      ++a2[a1[i]];
  5. }
  6. trace(a2);

mfg .r
bokel ist offline   Mit Zitat antworten
Alt 24-07-2003, 21:03   #3 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Kannst du mir das bitte ein bisschen ausführlicher schildern? Also, mal angenommen ich habe meinen Array:

myArray()=[5,1,5,3];

ActionScript:
  1. a1 = myArray();
  2. a2 = new Array();
  3. for( var i in a1){   //was passiert hier? was ist in?
  4.         ++a2[a1[i]];    //was passiert hier genau?
  5. }
  6. trace(a2);

So reicht mir das leider noch nicht!

Geändert von cyberjunk (24-07-2003 um 21:14 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 24-07-2003, 21:19   #4 (permalink)
Freelancer
 
Benutzerbild von komashooter
 
Registriert seit: Oct 2001
Ort: Germany - Berlin
Beiträge: 1.777
hier noch mal en beispiel


for i .. in ist fast genauso wie der normale befehl mit for
ActionScript:
  1. (i=0;i<myarray.length;i++)


bei for i...in
geht der index vom Ende zum Anfang

ActionScript:
  1. a1 = new Array([1,2,3,4,5]);
  2.  
  3.  
  4. a2 = new Array();
  5. for( var i in a1[0]){   
  6.  
  7.         a++
  8.         trace("a = "+a);
  9.         trace("i = "+i);
  10.         trace("index ("+i+") = "+a1[0][i]); // i ist die index Position
  11.        
  12. }
  13. trace(a2);

Geändert von komashooter (24-07-2003 um 21:22 Uhr)
komashooter ist offline   Mit Zitat antworten
Alt 24-07-2003, 21:32   #5 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Ich weiß ja nicht... Das gibt es mir leider auch noch nicht!

Zitat:
Ich hätte aber gern ausgewertet, ob es dreifache, zweifache, oder sogar eine dreifache Identität in Verbindung mit einem bestimmten Wert des nicht-identischen Elements gibt!

Hat einer von euch eine Idee, wie ich da am besten rangehen könnte?
Bin halt so blöd... Ehrlich!

Das mit for in habe ich gerafft! Wie aber sieht es mit Ausgabe der Ergebnisse aus?

Geändert von cyberjunk (24-07-2003 um 21:45 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 24-07-2003, 22:33   #6 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
Vom Prinzip her, wie bei bokel

ActionScript:
  1. var arr = new Array(1,1,2,3,4,4,5);
  2.  
  3. function arrayInfo(arr) {
  4.     var result = {};
  5.     for(var i in arr) {
  6.         result[arr[i]]++
  7.     }
  8.     return result;
  9. }
  10.  
  11. function output(obj) {
  12.     for (var elm in obj) {
  13.         trace(elm + " ist " + obj[elm] + "x enthalten");
  14.     }
  15. }
  16.        
  17. output(arrayInfo(arr));
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 24-07-2003, 22:45   #7 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Cool!

Sehr interessant! Könntest du dazu eventuell noch (möglichst ausführliche) Kommentare abgeben? Was ist elm?

Geändert von cyberjunk (24-07-2003 um 22:57 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 24-07-2003, 23:05   #8 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
elm ist nichts anderes als eine Variable die mir innerhalb der for..in Loop zur Verfügung steht, kann auch "dödel" oder "humbug" oder "i" lauten

Der Unterschied zum ersten Fall:

ActionScript:
  1. for (var i in arr) {
  2. ...
  3. }

ist nur, das ich hier als Indizes die Eigenschaften eines Objektes habe und nicht den Index eines Arrays.

(Hoffe das hilft, ansonsten weiter fragen)
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 24-07-2003, 23:19   #9 (permalink)
Freelancer
 
Benutzerbild von komashooter
 
Registriert seit: Oct 2001
Ort: Germany - Berlin
Beiträge: 1.777
wenn du bei result das var weg nimmst kannst du sehen wie das result object aussieht


ActionScript:
  1. var arr = new Array(1,1,2,3,4,4,5);
  2.  
  3. function arrayInfo(arr) {
  4.          result = {};
  5.         for(var i in arr) {
  6.                 result[arr[i]]++
  7.         }
  8.         return result;
  9. }
  10.  
  11. function output(obj) {
  12.         for (var elm in obj) {
  13.                 trace(elm + " ist " + obj[elm] + "x enthalten");
  14.         }
  15. }
  16. output(arrayInfo(arr));


ausgabe

Code:
Level #0:
Variable _level0.$version = "WIN 6,0,21,0"
Variable _level0.arrayInfo = [function 'arrayInfo']
Variable _level0.output = [function 'output']
Variable _level0.arr = [object #3, class 'Array'] [
    0:1,
    1:1,
    2:2,
    3:3,
    4:4,
    5:4,
    6:5
  ]
Variable _level0.result = [object #4, class 'Object'] {
    5:1,
    4:2,
    3:1,
    2:1,
    1:2
  }

Beispiel für ein Object

ActionScript:
  1. result = {};
  2. result[1]++;
  3. result["bingo"]="bongo";

Beispiel für array mit Object

Code:
Beispiel 

Im folgenden Beispiel wird ein neues Array erstellt und nach dem Feld ort sortiert: 
ActionScript:
  1. var recArray = new Array();
  2. recArray.push( { name: "bernd", ort: "aachen", plz: 52062 } );
  3. recArray.push( { name: "gerhard", ort: "stuttgart", plz: 70173 } );
  4. recArray.push( { name: "christa", ort: "berlin", plz: 10707 } );
  5. recArray.sortOn("ort");
  6. // Ergebnis:
  7. recArray[0] = name: "christa", ort: "berlin", plz: 10707
  8. recArray[1] = name: "gerhard", ort: "stuttgart", plz: 70173
  9. recArray[2] = name: "bernd", ort: "aachen", plz: 52062

Geändert von komashooter (24-07-2003 um 23:31 Uhr)
komashooter ist offline   Mit Zitat antworten
Alt 24-07-2003, 23:25   #10 (permalink)
Freelancer
 
Benutzerbild von komashooter
 
Registriert seit: Oct 2001
Ort: Germany - Berlin
Beiträge: 1.777
Zitat:
Geschrieben von e2e4
elm ist nichts anderes als eine Variable die mir innerhalb der for..in Loop zur Verfügung steht, kann auch "dödel" oder "humbug" oder "i" lauten

Der Unterschied zum ersten Fall:

ActionScript:
  1. for (var i in arr) {
  2. ...
  3. }

ist nur, das ich hier als Indizes die Eigenschaften eines Objektes habe und nicht den Index eines Arrays.

(Hoffe das hilft, ansonsten weiter fragen)


normaler weise ist elm i oder j oder ii aber das macht jeder wie er will oder je nachdem was frei ist
komashooter ist offline   Mit Zitat antworten
Alt 24-07-2003, 23:37   #11 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
i,j,k und so weiter benutze ich normalerweise nur für counter. Elm ist hier ungücklich gewählt, sollte entweder zb. prop(für property, da Objekt) oder dem wirklichen Verwendungszweck entsprechend key lauten, da die Idee hier ja ist, ein Objekt als Hash zu mißbrauchen.
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 24-07-2003, 23:41   #12 (permalink)
Freelancer
 
Benutzerbild von komashooter
 
Registriert seit: Oct 2001
Ort: Germany - Berlin
Beiträge: 1.777
nur für counter genau

for i..in ist ja auch eine art counter

Zitat:
Geschrieben von e2e4
...ein Objekt als Hash zu mißbrauchen.
versteh nich was du damit meinst


dass man frunktionen mit anderen funktionen auch schon aufrufen kann ist mir auch neu


Code:
output(arrayInfo(arr));


ActionScript:
  1. var arr = new Array(1,1,2,3,4,4,5);
  2.  
  3. function arrayInfo(arr) {
  4.          result = {};
  5.         for(var i in arr) {
  6.                 result[arr[i]]++
  7.         }
  8.         return result;
  9. }
  10.  
  11. function output(obj) {
  12.         for (var elm in obj) {
  13.                 trace(elm + " ist " + obj[elm] + "x enthalten");
  14.         }
  15.         return obj;
  16. }
  17. function output2(obj) {
  18.         for (var i in obj) {
  19.                 trace(i + " = counter");
  20.         }
  21. }
  22. output2(output(arrayInfo(arr)));

Geändert von komashooter (24-07-2003 um 23:54 Uhr)
komashooter ist offline   Mit Zitat antworten
Alt 25-07-2003, 13:29   #13 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Klasse soweit Jungs, ihr helft mir echt weiter!

@ komashooter

Deinen Code finde ich für meinen Zweck am praktikabelsten!

@ all

ActionScript:
  1. var arr = new Array(1,1,2,3,4,4,5);
  2.  
  3. function arrayInfo(arr) {
  4.         result = {};
  5.         for(var i in arr) {
  6.                 result[arr[i]]++
  7.         }
  8.         return result;
  9. }
  10.  
  11. function output(obj) {
  12.         for (var elm in obj) {
  13.                 trace(elm + " ist " + obj[elm] + "x enthalten");
  14.         }
  15. }
  16. output(arrayInfo(arr));

Wenn ich Nullen nicht mitgewertet haben möchte, wie müsste das aussehen? Mal angenommen, ich hätte vor, nach einer entdeckten dreifachen Kombination nur noch zu prüfen, mit welchem nur einmal vorkommenden Wert diese Dreier-Kombi vorliegt? Bei einer 2x Kombi nimmt man den höheren Einzelwert.

Also, ich möchte folgende Kombinationen abfangen:
4x Gleiche
3x Gleiche in Verbindung mit der 7 (ist ein Joker) = 4x Gleiche
3x Gleiche
2x Gleiche in Verbindung mit der 7 (ist ein Joker) = 3x Gleiche
2x Gleiche 2x

Nuller und Nullkombis interessieren nicht.

Geändert von cyberjunk (25-07-2003 um 13:53 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Alt 25-07-2003, 13:52   #14 (permalink)
God made me funky..
 
Registriert seit: Apr 2003
Ort: Bremen
Beiträge: 1.067
ActionScript:
  1. var arr = new Array(1,1,2,3,4,4,5);
  2.  
  3. function arrayInfo(arr) {
  4.       [B]var[/B]   result = {}; // das var hat schon seinen Sinn da
  5. //du möchtest doch nicht das die Variable global wird, sonst kann
  6. //man sich die funktion auch gleich sparen und alles auf der
  7. //main timeline abfrühstücken.
  8.         for(var i in arr) {
  9.                 result[arr[i]]++
  10.         }
  11.         return result;
  12. }

Gegenfrage, interessiert dich nur die letztendliche Anzahl also

n x Gleiche + 0-1 Joker

oder brauchst du noch die Aufschlüsselung zB:

3 x die 3 und einmal die 7?
__________________
Kunst ist in erster Linie eine Frage der Form und nicht des Inhalts
Paul Rand
e2e4 ist offline   Mit Zitat antworten
Alt 25-07-2003, 14:03   #15 (permalink)
- - - - - - -
 
Benutzerbild von cyberjunk
 
Registriert seit: Jun 2002
Ort: Bremen
Beiträge: 207
Also, ich bastel privat an einer Slotmachine, um es jetzt mal zu sagen.

Die Slots laufen schon, und wenn so ein Slot-MC abläuft, übergibt er jeweils die Werte 0-7 an die Variablen _root.s1 bis _root.s4. Die Variablen s1-s4 lasse ich dann in einen Array einlesen, um sie Auswerten zu können. myArray = (s1,s2,s3,s4);

ActionScript:
  1. // 0 = NULL
  2. // 1 = APPLE
  3. // 2 = COIN3X
  4. // 3 = BANANA
  5. // 4 = COIN2X
  6. // 5 = CHERRY
  7. // 6 = COIN1X
  8. // 7 = JOKER
  9.  

Null steht jeweils dafür, daß keines der auswertbaren Bilder (Cherry etc) angezeigt wird!

@ e2e4

Wenn ich dich richtig verstanden habe, benötige ich wohl die Aufschlüsselung. Desweiteren muss ich die Möglichkeit haben, Punkteberechnungen für die jeweiligen Kombis auszuführen.

Geändert von cyberjunk (25-07-2003 um 14:05 Uhr)
cyberjunk ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele