2 Stimmen

Flash as3 mit einem Array innerhalb der Funktion Math.max()

Mögliches Duplikat:
Wie kann man am besten den Mindest- oder Maximalwert aus einem Zahlenfeld ermitteln?

Hallo - Ich versuche, die Math.max()-Funktion von Flash zu verwenden, um den höchsten Wert einer Reihe von Zahlen zu ermitteln. Normalerweise sind diese über eine durch Komma getrennte Zeichenfolge von Zahlen eingegeben, aber ich muss es Schleife durch eine Reihe von Zahlen in einem Array haben. Was ist die richtige Syntax dafür? Ich habe es versucht:

var maxMemberWidth = int(Math.max(
    for (var k=0;k<memberClips.length;k++){
        memberClips[i].memeberWidth;
    }
));

aber das ist offensichtlich nicht richtig. Ich habe das Gefühl, die Antwort beinhaltet die Ausführung einer Art von separaten Funktion und die Rückgabe der Werte an diese Funktion, aber ich habe nicht ganz bekommen die Syntax richtig noch.

2voto

Lucas Gabriel Sánchez Punkte 37339

Ihre Herangehensweise ist nicht völlig falsch, Sie können es schaffen:

// note the apply in the next line!
var maxMemberWidth:int = int(Math.max.apply(null, AllMembersWidth()));

...

private function AllMembersWidth():Array
{
    var widths:Array = [];
    for (var k:int = 0; k < memberClips.length; k++)
        widths[k] = memberClips[k].memeberWidth;
    return widths;
}

Dies funktioniert auch, wenn Sie ein leeres Array haben (es gibt -Infinity )

1voto

Matt Chan Punkte 618

Sie können stattdessen Folgendes versuchen:

var max_number:Number = memberClips[0];

for( var i:int = 1; i < memberClips.length; i++ )
{
    max_number = Math.max( max_number, memberClips[i] );
}

Dabei wird die Maximalzahl mit dem ersten Element des Arrays initialisiert und dann in einer Schleife alle Elemente des Arrays durchlaufen, bis das Ende des Arrays erreicht ist. Dann haben Sie die gesuchte Maximalzahl. Die Indexvariable i wird mit 1 initialisiert, weil man das erste Element nicht mit sich selbst vergleichen muss. Sie sollten beachten, dass dieser Code auch davon ausgeht, dass Sie mindestens ein Element in Ihrem Array haben.

1voto

Casper Beyer Punkte 2077

Eine komprimiertere Version, die nicht so sexy aussieht, wie sie in Ruby wäre, aber sie funktioniert.

var widths:Array = clips.map( function(o:*, i:int, a:Array):* { return o.width; } );

var max:Number = Math.max.apply(null, widths);
var min:Number = Math.min.apply(null, widths);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X