повторяющаяся коллекция хешей - PullRequest
7 голосов
/ 16 августа 2010
{"Journal"=>[[4, -785.0], 
             [13, -21.9165000915527], 
             [14, -213.008995056152], 
             [15, -50.074499130249]]}

Как вы можете повторить этот хеш в Ruby, и как бы вы могли выделить ключи и значения?

Ответы [ 2 ]

21 голосов
/ 16 августа 2010

Ruby имеет единый интерфейс итерации.Все коллекции в Ruby имеют метод с именем each, который позволяет выполнять итерацию по каждому элементу коллекции.Обратите внимание, однако, что явная итерация является запахом кода.В основном вы должны использовать итераторы более высокого уровня, такие как map, reduce, select, find, reject и т. Д.

В этом конкретном случае, когда коллекция представляет собой Hash,каждый элемент, который передается вашему блоку, представляет собой двухэлементный массив, состоящий из ключа и значения:

print hsh.reduce('') {|s, el|
  s << "The key is #{el.first} and the value is #{el.last}.\n"
}

Благодаря деструктурирующему связыванию Руби вы можете просто связать два элемента массива сдве переменные в вашем блоке, и вам не нужно будет постоянно разбирать массив:

print hsh.reduce('') {|s, (k, v)|
  s << "The key is #{k} and the value is #{v}.\n"
}
14 голосов
/ 16 августа 2010
myHash.each do |key, value|
  // key holds the key, value holds the value
end

Если вы хотите преобразовать массивы внутри вашего массива в карту, сделайте это:

myNewHash = {}
myArrayOfArrays = myHash["Journal"]
myArrayOfArrays.each do | item |
  myNewHash[item[0]] = item[1]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...