2013-04-18 2 views

ответ

2
h.values.flatten 
# => ["one1", "one2", "two1", "two2"] 

Вы можете сделать то же самое ключи, конечно. Единственная причина, по которой вам нужно flatten, состоит в том, что сами значения представляют собой массивы, поэтому h.values только вернет [["one1", "one2"], ["two1", "two2"]].

Также, как FYI, mergemeans something different (and pretty useful) in Ruby.

Если вы хотите убедиться, что он сглаживает только один уровень (за комментарий @ tokland), вы можете предоставить необязательный аргумент flatten, например, с flatten(1).

+2

nit-pick: 'flatten (1)' более точный. – tokland

+0

@tokland Зависит от ситуации, поскольку в настоящее время не ясно, что OP хочет сгладить один уровень. Однако я добавлю примечание. – brymck

+0

Да. Я хочу сказать, что «сглаживание» чрезмерно. Много раз нам нужно только сгладить один уровень, и все же мы называем рекурсивную квартиру. Возможно, OP имеет вложенные массивы, но в этом случае он (должен был бы) поместить его в пример. Просто деталь, больше ничего. – tokland

2
h.flat_map &:last 
=> ["one1", "one2", "two1", "two2"] 
+0

Хорошо. Я опаздываю, чтобы опубликовать. Из-за заполнения CAPTCHA SO 'Вы робот' :( –

Смежные вопросы