Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
"p"=>["perl", "python"], "r"=>["ruby"]}
    grep
liefert ein Array mit Elementen zurück, die zum Argumentwert passen, wobei die Übereinstimmung mit dem Case-Vergleichsoperator (
===
) des Arguments vorgenommen wird. Wenn ein regulärer Ausdruck als Argument genutzt wird, arbeitet diese Methode wie das Unix-Tool grep . Wenn ein Block mit dem Aufruf verbunden ist, wird dieser genutzt, um passende Elemente zu verarbeiten, so als ob
collect
oder
map
für die Ergebnisse von
grep
aufgerufen würden:
langs = %w[ java perl python ruby ]
langs.grep(/^p/) # => [perl, python]: beginnen mit 'p'
langs.grep(/^p/) {|x| x.capitalize} # => [Perl, Python]: Groß-/Kleinschreibung anpassen
data = [1, 17, 3.0, 4]
ints = data.grep(Integer) # => [1, 17, 4]: nur Integer
small = ints.grep(0..9) # [1,4]: nur im Bereich
    In Ruby 1.9 werden die Auswahlmethoden, die hier beschrieben wurden, durch
first
,
take
,
drop
,
take_while
und
drop_while
ergänzt.
first
liefert das erste Element eines
Enumerable
-Objekts oder mit einem Integer-Argument
n
ein Array mit den ersten
n
Elementen zurück.
take
und
drop
erwarten ein Integer-Argument.
take
verhält sich einfach wie
first
– es liefert ein Array mit den ersten
n
Elementen des
Enumerable
-Objekts zurück.
drop
macht das Gegenteil – es gibt ein Array aller Elemente des
Enumerable
mit Ausnahme der ersten
n
zurück:
p (1..5).first(2) # => [1,2]
p (1..5).take(3) # => [1,2,3]
p (1..5).drop(3) # => [4,5]
    take_while
und
drop_while
erwarten einen Block statt eines Integer-Arguments.
take_while
übergibt die Elemente des
Enumerable
-Objekts an den Block, bis der Block das erste Mal
false
oder
nil
zurückgibt. Dann liefert die Methode ein Array der bisherigen Elemente zurück, für die der Block
true
ergab.
drop
übergibt ebenfalls Elemente an den Block, bis der Block das erste Mal
false
oder
nil
ergibt. Dann wird allerdings ein Array mit dem Element, das
false
lieferte, und allen folgenden Elementen zurückgeliefert:
[1,2,3,nil,4].take_while {|x| x } # => [1,2,3]: bis nil
[nil, 1, 2].drop_while {|x| !x } # => [1,2]: führende nils weg
    9.5.1.6 Collections reduzieren
    Manchmal wollen wir eine Collection auf einen einzelnen Wert reduzieren , der irgendeine Eigenschaft der Collection beschreibt.
min
und
max
sind Methoden, die solch eine Reduktion durchführen und das kleinste oder größte Element der Collection zurückgeben (davon ausgegangen, dass sich die Elemente untereinander per
<=>
vergleichen lassen):
[10, 100, 1].min # => 1
['a','c','b'].max # => 'c'
[10, 'a', []].min # => ArgumentError: elements not comparable
    min
und
max
können wie
sort
einen Block entgegennehmen, um zwei Elemente zu vergleichen. In Ruby 1.9 ist es einfacher, stattdessen
min_by
und
max_by
zu nutzen:
langs = %w[java perl python ruby] # Wer hat den längsten Namen?
langs.max {|a,b| a.size <=> b.size } # => "python": Block vergleicht 2
langs.max_by {|word| word.length } # => "python": nur Ruby 1.9
    Ruby 1.9 definiert zudem
minmax
und
minmax_by
, die sowohl den minimalen als auch den maximalen Wert einer Collection bestimmen und beide als ein Array mit zwei Elementen
[min,max]
zurückgeben:
(1..100).minmax # => [1,100] min, max als Zahlen
(1..100).minmax_by {|n| n.to_s } # => [1,99] min, max als Strings
    any?
und
all?
sind Prädikate, die ebenfalls eine Reduktion durchführen. Sie wenden einen Prädikatblock auf die Elemente der Collection an.
all?
gibt
true
zurück, wenn das Prädikat für alle Elemente der Collection
true
ist (also nicht
nil
und nicht
false
).
any?
liefert
true
zurück, wenn das Prädikat für mindestens eines der Elemente
true
ist. In Ruby 1.9 erhält man mit
none?
nur dann
true
, wenn keines der Prädikate einen wahren Wert liefert. In 1.9 gibt es auch noch
one?
, das
true
nur dann zurückgibt, wenn das Prädikat nur für genau ein Element der Collection
true
ergibt. Ruft man diese Methoden ohne Block auf, prüfen sie einfach die Elemente der Collection selbst:
c = −2..2
c.all? {|x| x>0} # => false: nicht alle Werte sind > 0
c.any? {|x| x>0} # => true: manche Werte sind > 0
c.none? {|x| x>2} # => true: keine Werte sind > 2
c.one? {|x| x>0} # => false: mehr als ein Wert ist > 0
c.one? {|x| x>2} # => false: kein Wert ist > 2
c.one? {|x| x==2} # => true: ein Wert == 2
[1, 2, 3].all? # => true: keine Werte sind nil oder false
[nil, false].any? # => false: keine wahren Werte
[].none? # => true: keine nicht-false- und nicht-nil-Werte
    Eine weitere Ergänzung in Ruby 1.9 ist die Methode
count
: Sie gibt die Anzahl

Weitere Kostenlose Bücher