...wenn’s auch kompliziert geht?
Knut: hi korny
Knut: kann ich mit ruby ein array von integers prüfen ob es kleiner als ein anderer int ist?
Knut: [1,2,3,4] < 7 => true
Knut: bzw. wie kann ich das umschreiben
murphy: du müsstest das für jedes einzelne prüfen
murphy: mmh…Enumerable#all? gibt es noch nicht in Ruby 1.8…
murphy: all_smaller = [1,2,3,4].inject(true) { |smaller, x| smaller && x < 7 }
murphy: inject ist sowas ähnliches wie foldL in Haskell
murphy: es gibt nacheinander den rückgabewert des letzten blockaufrufes und jedes element in den block
murphy: beim ersten mal den wert, den du ihm übergibst
murphy: “smaller” ist also erst true, dann true && 1 < 7, dann (true && 1 < 7) && 2 < 7 usw.
murphy: am ende kommt in dem fall auch true raus
murphy: nein warte! ich bin auch blöd: all_smaller = ![1,2,3,4].find { |x| x >= 7 }
Knut: ich hab was gefunden:
Knut: a.sort.last < 7
murphy: sort…darauf wäre ich nicht gekommen…
murphy: aber meine find-variante ist schneller ^^
Knut: jaja :)
murphy: wie wär’s mit .max statt .sort.last?
murphy: [1,2,6,4].max < 7
murphy: das ist das schönste :)
Knut: jupp
Kommentar schreiben
Kommentare
ein klassisches .... manchmal sieht man den Wald vor lauter Bäumen nicht, und wohl der Hauptgrund für suboptimalen Code, weil einem einfach nicht der einfachste und eleganteste Weg auf Teufel komm raus, einfach nicht einfallen will :-) Ist eine sehr schöne Ergänzung zum Bericht "Kostenlose Ratschläge sind Jeden Cent Wert.". Einfach die Sache, wie die sprichwörtliche Salami, eine Weile ziehen lassen, und dann noch mal die betreffenden Zeilen checken :-)