Ответ 1
Кроме того, немного проще....
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
У меня есть это:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
и я хочу сделать следующее: [["a","b","c"],["b","c"]]
Кажется, что он должен работать, но это не так:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
Любые предложения?
Кроме того, немного проще....
>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
Я бы использовал:
hash.map { |key, value| value }
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]]
Enumerable#collect
принимает блок и возвращает массив результатов запуска блока один раз на каждый элемент перечислимого. Таким образом, этот код просто игнорирует ключи и возвращает массив всех значений.
Модуль Enumerable
довольно увлекательный. Зная это, вы можете сэкономить много времени и много кода.
hash = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
Есть и этот:
hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]
Почему это работает:
&
вызывает to_proc
объекта и передает его как блок для метода.
something {|i| i.foo }
something(&:foo)
Это так же просто, как
hash.values
#=> [["a", "b", "c"], ["b", "c"]]
это вернет новый массив, заполненный значениями из хеша
если вы хотите сохранить этот новый массив
array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]
array_of_values
#=> [["a", "b", "c"], ["b", "c"]]