ruby – iterați printr-un hash care conține perechi de valori de tip cheie/raion și iterați prin fiecare valoare (Programare, Ruby)

user6127511 a intrebat.
a intrebat.

Am un hash care arată astfel:

{
  "key1": [
     "value1",
     "value2",
     "value3"
  ],
  "key2": [
     "value1",
     "value2",
     "value3",
     "value4",
     "value5"
  ],
  "key3": [
     "value1"
  ],
  "key4": [
     "value1",
     "value2"
  ]
}

Cum pot itera prin fiecare cheieN, în timp ce fac o buclă prin toate valorile din acea cheie?

Am un array cu toate cheile, dacă asta vă ajută.

Mulțumesc

Comentarii

  • Possible duplicate of Cum să iterați peste un hash în Ruby? –  > Por Hamms.
4 răspunsuri
tadman

Destul de simplu, într-adevăr:

hash.each do |name, values|
  values.each do |value|
    # ...
  end
end

Poți să faci ce vrei cu name și value la cel mai mic nivel.

Comentarii

  • Într-adevăr simplu – am privit lucrurile în mod greșit. mulțumesc –  > Por utilizator6127511.
  • Odată ce vă veți obișnui cu el, veți găsi acest model funcționează într-o varietate de situații. .each este coloana vertebrală a majorității aplicațiilor Ruby. –  > Por tadman.
YasirAzgar

Dacă sunteți sigur de dimensiunea array-urilor, pur și simplu puteți face așa,

ha = {:a => [1,2]}

ha.each do |k, (v1, v2)|
   p k
   p v1
   p v2
end

Output
:a
1
2

Sheharyar

Puteți face așa:

hash.each do |key, array|
  array.each do |value|
    # do something
  end
end

Dharmesh Rupani
hash.each do |key_N, values_N|
  values_N.each so |values|
  .
  .
  #YourCode
  .
  .
  end
end

Comentarii

  • Nume ca keyN ar trebui să fie key_n pentru a respecta convenția Ruby. Literele majuscule au o semnificație semnificativă, mai ales când vine vorba de CONSTANT_NAMES și ClassNames. –  > Por tadman.
  • @tadman Mulțumesc pentru că ați subliniat acest lucru. Am actualizat răspunsul meu. –  > Por Dharmesh Rupani.
  • Ajungând acolo. În general, majusculele sunt evitate în totalitate în numele variabilelor, doar încurcă lucrurile. –  > Por tadman.
  • Nu so ci do. –  > Por Lukas Baliak.

Tags: