ruby-mine

exploring the mine

Warum einfach...

von murphy am 12.02.2008 (20 Uhr)

...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

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. Carsten Werner schrieb am 12.02.2008 (21 Uhr)

    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 :-)