Вставка значения в массив при некоторых условиях - PullRequest
0 голосов
/ 11 октября 2018

Как я могу добавить значение к массиву, встроенному при некоторых условиях?

Этот пример:

["aaa", ("bbb" if false)]
# => ["aaa", nil]

добавляет nil, но я не хочу ничего добавлять:

["aaa"]

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Вы либо делаете:

["aaa", ("bbb" if false)].compact

или:

["aaa", *("bbb" if false)]

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

["aaa", *({b: :b} if true)]
# => ["aaa", [:b, :b]]
0 голосов
/ 11 октября 2018

Вы можете объединить пустой массив, когда условие ложно, что по сути ничего не делает:

["aaa"] + (1==1 ? ["foo"] : [])
 => ["aaa", "foo"]
["aaa"] + (1==2 ? ["foo"] : [])
 => ["aaa"]
0 голосов
/ 11 октября 2018

Я бы даже опубликовал это как ответ, так как это самый лаконичный и чистый способ выполнения этой задачи.

["aaa"].tap { |arr| arr << "bbb" if false }

Более общим и простым способом:

input = [42]
to_add = {true: :true, false: :false}

to_add.each do |needed, value|
  input.tap { |arr| arr << value if needed }
end
#⇒ [42, :true]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...