de Declan Meehan

Profitați la maximum de Ruby utilizând metodele .select .map și .reduce împreună

Profitati la maximum de Ruby utilizand metodele select map si
imagine din kgntechnologies

Nu ar trebui să vă repetați niciodată când scrieți cod. Cu alte cuvinte, nu te repeta de două ori. Pentru a fi clar – nu scrieți ceva care a fost deja explicat.

Aceasta se numește tautologie și, atunci când scrieți codul, trebuie evitată în orice moment. De exemplu, nu ar fi fost frumos în loc să citesc acest paragraf lung dacă aș folosi doar cele trei cuvinte puternice „niciodată, repetă, tu însuți”?

Ei bine, asta îți voi arăta cum să faci cu metodele .select .map și .reduce (sau .inject) ale lui Ruby.

Exemplu

Să presupunem că vă uitați la un dicționar plin de nume de angajați, funcții și salarii. Să ne imaginăm, de asemenea, că ați dorit să aflați suma totală pe care compania a cheltuit-o pentru salariile dezvoltatorilor. Acum, fără a utiliza o singură metodă în Ruby, cel mai probabil ați scrie codul dvs. așa ceva:

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

Uau – adică o mulțime de rânduri de scris pentru a găsi doar trei persoane. Imaginați-vă dacă compania ar angaja sute de oameni!

Acum, dacă știți puțin despre bucle, atunci cel mai simplu pas următor ar fi să scrieți fiecare metodă pentru a pune toate salariile împreună. Acest lucru ar putea ocupa doar cinci sau șase rânduri, dar verificați acest lucru!

puts people.select{|x| x[:job_title] == "developer"}.map{|y| y[:salary].to_i}.reduce(:+)
1611684965 147 Profitati la maximum de Ruby utilizand metodele select map si
Poate părea confuz, dar hai să-l împărțim în bucăți.

Veți observa că fiecare metodă începe și se termină cu o paranteză buclată. Aceasta poate fi utilizată în locul comenzilor do și end dacă este un bloc cu o singură linie.

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

.Selectați

Să începem cu metoda .select. Creăm o variabilă (x) și repetăm ​​fiecare metodă din matricea de oameni. Apoi verifică cu o expresie booleană dacă cheia (: job_title) este egală cu șirul „dezvoltator”. Dacă booleanul returnează adevărat, atunci metoda selectează plasează hashul care a revenit adevărat într-un obiect nou.

.Hartă

Metoda hărții este utilizată pentru a crea o nouă matrice care nu afectează matricea prin care se bucură. Am folosit această metodă pentru a crea o nouă variabilă (y) și apoi am folosit acea variabilă pentru a obține valoarea cheii (: salariu). Apoi, în cele din urmă, am transformat acea valoare dintr-un șir într-un număr întreg.

.Reduce

Acesta pare probabil cel mai confuz, așa că hai să-l extindem puțin.

.reduce(0){|sum, indv| sum + indv} #is the same as .reduce(:+)

Metoda de reducere creează o nouă variabilă la care setați valoarea egală în primele paranteze (0). Apoi creați două valori noi (sumă și indv) dintre care una este suma la care adăugați salariile individuale.

Sper că asta o explică bine! Vă rog să-mi spuneți dacă aveți întrebări.