Распечатать массив хэшей - PullRequest
       0

Распечатать массив хэшей

0 голосов
/ 30 сентября 2019

У меня есть массив хэшей

Например:

hash = [{"a"=>"apple", "b"=>"ball", "c"=>"cat"},
{"d"=>"dog", "e"=>"eagle", "f"=>"fly"}]

Я бы хотел, чтобы значения печатались в цикле.

Ожидаемый вывод:

apple  
ball  
cat  
dog  
eagle  
fly  

Я пробовал

hash.each do |each_hash|
  each_hash do |each_hash_element|
    each_hash_element do |k,v|
      puts "${v}"
    end
  end
end

Ответы [ 4 ]

3 голосов
/ 30 сентября 2019

Другой вариант - сначала получить массив всех значений, а затем вывести его.

puts hash.flat_map(&:values)

#flat_map отображает значения массива и объединяет результат каждого блока (выравнивание всего на один уровень).

hash.map(&:values) #=> [["apple", "ball", "cat"], ["dog", "eagle", "fly"]]
hash.flat_map(&:values) #=> ["apple", "ball", "cat", "dog", "eagle", "fly"]

В этом сценарии puts hash.map(&:values) также будет работать, но я лично нахожу использование #flat_map более подходящим.

1 голос
/ 30 сентября 2019

При неизменном стиле кодирования рабочая версия выглядит следующим образом:

array.each do |hash| # I'll rename the hash array to "array" to avoid confusion.
  hash.each_value do |value| # or: hash.each do |key, value|
    puts value
  end
end

Это циклически повторяет массив хэшей и циклически изменяет значения для каждого хэша.

Проблемас вашим текущим кодом each_hash является хеш-элементом, а не методом. Вы должны вызывать метод each или each_value для каждого такого элемента.

1 голос
/ 30 сентября 2019

Я предполагаю, что хеш-ключи уникальны.

Вы можете объединить все хэши с помощью метода redu * и распечатать все значения следующим образом:

puts hash.reduce({}, :merge).values
0 голосов
/ 30 сентября 2019

Сначала вы спрашиваете о массиве с двумя хэшами.

hash = [{"a"=>"apple", "b"=>"ball", "c"=>"cat"},
{"d"=>"dog", "e"=>"eagle", "f"=>"fly"}]

В следующем я называю его массивом ...

array = [{"a"=>"apple", "b"=>"ball", "c"=>"cat"},
{"d"=>"dog", "e"=>"eagle", "f"=>"fly"}]

Теперь вам нужно выполнить итерацию каждогохеш в вашем массиве и распечатайте каждое значение этого хеша, оставив ключи выключенными

array.each { |hash| puts hash.values }

PS Это решение бесстыдно украдено у @Cary Swoveland

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...