Ruby: Wie setze ich eine Variable auf 0 oder, wenn sie bereits gesetzt ist, inkrementiere sie um 1

7

Ich kenne den || = Operator, denke aber nicht, dass es mir hier helfen wird ... ich versuche ein Array zu erstellen, das die Anzahl der "Typen" in einem Array von Objekten zählt.

%Vor%

Gibt es einen eleganteren Weg, dies zu tun?

    
Dan Nguyen 02.09.2009, 18:28
quelle

6 Antworten

14
%Vor%     
sepp2k 02.09.2009, 19:21
quelle
6

Verwenden Sie die Methode Array#fetch , für die Sie einen Standardwert angeben können, wenn der Index nicht existiert:

%Vor%     
glenn jackman 02.09.2009 19:17
quelle
4
%Vor%

Alternativ

%Vor%     
Josh Matthews 02.09.2009 18:39
quelle
2

||= hilft:

%Vor%     
Jeremy Ruten 02.09.2009 18:33
quelle
0

Ihre Variable newarray wird seltsamerweise benannt, da in Ruby und den meisten anderen Sprachen Arrays durch Ganzzahlen indiziert werden, nicht zufällige Objekte wie Class . Es ist eher ein Hash .

Außerdem sollten Sie c.class anstelle von c.type verwenden, was veraltet ist.

Schließlich, da Sie ein Hash erstellen, können Sie inject so verwenden:

%Vor%

Oder für einen Einzeiler:

%Vor%

Wie Sie sehen, gibt dies die gewünschten Ergebnisse:

%Vor%     
Rudd Zwolinski 02.09.2009 20:42
quelle
0

In Ruby 1.8.7 oder höher können Sie group_by verwenden und dann jede Elementeliste in count - 1 umwandeln und aus dem von map zurückgegebenen Array einen Hash erstellen.

%Vor%     
jonas054 18.06.2011 10:46
quelle

Tags und Links