Как объединить хэш со значениями массива в один массив:слияния хэш со значениями массива в один массив
h = {
one: ["one1", "one2"],
two: ["two1", "two2"]
}
после слияния должно быть:
["one1","one2","two1","two2"]
Как объединить хэш со значениями массива в один массив:слияния хэш со значениями массива в один массив
h = {
one: ["one1", "one2"],
two: ["two1", "two2"]
}
после слияния должно быть:
["one1","one2","two1","two2"]
h.values.flatten
# => ["one1", "one2", "two1", "two2"]
Вы можете сделать то же самое ключи, конечно. Единственная причина, по которой вам нужно flatten
, состоит в том, что сами значения представляют собой массивы, поэтому h.values
только вернет [["one1", "one2"], ["two1", "two2"]]
.
Также, как FYI, merge
means something different (and pretty useful) in Ruby.
Если вы хотите убедиться, что он сглаживает только один уровень (за комментарий @ tokland), вы можете предоставить необязательный аргумент flatten
, например, с flatten(1)
.
nit-pick: 'flatten (1)' более точный. – tokland
@tokland Зависит от ситуации, поскольку в настоящее время не ясно, что OP хочет сгладить один уровень. Однако я добавлю примечание. – brymck
Да. Я хочу сказать, что «сглаживание» чрезмерно. Много раз нам нужно только сгладить один уровень, и все же мы называем рекурсивную квартиру. Возможно, OP имеет вложенные массивы, но в этом случае он (должен был бы) поместить его в пример. Просто деталь, больше ничего. – tokland
h.flat_map &:last
=> ["one1", "one2", "two1", "two2"]
Хорошо. Я опаздываю, чтобы опубликовать. Из-за заполнения CAPTCHA SO 'Вы робот' :( –
- важный заказ? или "[" два1 "," два2 "," один1 "," два2 "]' приемлемо? – tokland