Hozza ki a legtöbbet a Ruby-ból a .select .map és a .reduce módszerek együttes használatával

Soha nem szabad soha megismételnie magát kódírás közben. Más szóval, ne ismételje meg kétszer magát. Hogy világos legyek - ne írj olyasmit, amit már elmagyaráztak.

Ezt tautológiának hívják, és kódíráskor mindenkor kerülni kell. Például, nem lett volna jó e hosszadalmas bekezdés elolvasása helyett, ha csak azt a három hatalmas szót használom, hogy „soha, ne ismételd meg önmagad”?

Nos, ezt fogom megmutatni, hogyan kell eljárni Ruby .select .map és .reduce (vagy .inject) módszereivel.

Példa

Tegyük fel, hogy egy szótárt keres, amely tele van az alkalmazottak nevével, munkakörével és fizetésével. Képzeljük el azt is, hogy meg akarta tudni, hogy mekkora összeget költött a cég a fejlesztők fizetésére. Most, egyetlen módszer használata nélkül a Ruby-ban, nagy valószínűséggel valami hasonlót írna ki:

people = [ { first_name: "Gary", job_title: "car enthusiast", salary: "14000" }, { first_name: "Claire", job_title: "developer", salary: "15000" }, { first_name: "Clem", job_title: "developer", salary: "12000" } ] person1 = people[0][:job_title] person2 = people[1][:job_title] person3 = people[2][:job_title] total = 0 if person1 == "developer" total += people[0][:salary].to_i end if person2 == "developer" total += people[1][:salary].to_i end if person3 == "developer" total += people[2][:salary].to_i end puts total

Wow - ez egy csomó sor, amit csak három ember megtalálásához kell írni. Képzelje el, ha a vállalat több száz embert alkalmazna!

Most, ha tudsz egy kicsit a hurkokról, akkor a következő legegyszerűbb lépés az lenne, ha minden metódust megírnál az összes fizetés összerakására. Ez csak öt vagy hat sort foglalhat el, de nézze meg ezt!

puts people.selectx.mapy.reduce(:+)

Észre fogja venni, hogy minden módszer göndör zárójelben kezdődik és végződik. Ez a do és end parancsok helyett használható, ha egy soros blokkról van szó.

{} == (do end) #for single-line blocks only

.választani

Kezdjük a .select módszerrel. Létrehozunk egy változót (x), és iterálunk minden módszert a People tömbben. Ezután logikai kifejezéssel ellenőrzi, hogy a (: job_title) kulcsa megegyezik-e a „fejlesztő” karakterlánccal. Ha a logikai érték visszaadja az igaz értéket, akkor a select metódus új objektumba helyezi az igaz értéket.

.térkép

A térkép metódust olyan új tömb létrehozására használják, amely nem befolyásolja az általa hurokolt tömböt. Ezzel a módszerrel létrehoztam egy új változót (y), majd ezt a változót megragadva a kulcs értékét (: fizetés). Aztán végül ezt az értéket egy karakterláncból egész számmá változtattam.

.Csökkentés

Ez valószínűleg a legzavaróbbnak tűnik, ezért bővítsük ki egy kicsit.

.reduce(0) sum + indv #is the same as .reduce(:+)

A reduc módszer létrehoz egy új változót, amelynek az első zárójelben (0) megadta az értékét. Ezután két új értéket hoz létre (összeg és indv), amelyek közül az összeg az összeg, amelyhez hozzáadja az egyes fizetéseket.

Remélem, ez jól megmagyarázza! Kérjük, jelezze, ha kérdése van.