Как я могу подставить элемент в массиве?
a = [1,2,3,4,5]
Мне нужно заменить 5 на [11,22,33,44].flatten!
так что a
теперь становится
a = [1,2,3,4,11,22,33,44]
Как я могу подставить элемент в массиве?
a = [1,2,3,4,5]
Мне нужно заменить 5 на [11,22,33,44].flatten!
так что a
теперь становится
a = [1,2,3,4,11,22,33,44]
Не уверен, что вы хотите заменить конкретное значение или нет, но это работает:
a = [1, 2, 3, 4, 5]
b = [11, 22, 33, 44]
a.map! { |x| x == 5 ? b : x }.flatten!
Это повторяется по значениям a
, и когда он находит значение 5
, он заменяет это значение массивом b
, затем выравнивает массивы в один массив.
Возможно, вы имеете в виду:
a[4] = [11,22,33,44] # or a[-1] = ...
a.flatten!
Функциональное решение может быть приятнее, как насчет просто:
a[0..-2] + [11, 22, 33, 44]
что дает...
=> [1, 2, 3, 4, 11, 22, 33, 44]
Версия bta с использованием a.index(5) является самой быстрой:
a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6
Как минимум на 10% быстрее, чем Райан МакГери:
a.map!{ |x| x == 5 ? b : x } # 5.647182 sec/10^6
Однако обратите внимание, что a.index(5) возвращает только первый индекс, где 5 найден. Итак, учитывая массив, где 5 появляется более одного раза, результаты будут разными:
a = [1, 2, 3, 4, 5, 5]
b = [11,22,33,44]
a[a.index(5)] = b if a.index(5)
a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 5]
a.map!{ |x| x == 5 ? b : x }
a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 11, 22, 33, 44]
Array # delete вернет элемент или ноль. Вы можете использовать это, чтобы узнать, нужно ли нажимать новые значения
a.push 11,22,33,44 if a.delete 5
Вам действительно не нужно сглаживать, если вы просто конкатенируете. Итак, выровняйте последний элемент с первого массива и соедините их:
a = [ 1, 2, 3, 4, 5 ] #=> [1, 2, 3, 4, 5]
t = [11, 22, 33, 44] #=> [11, 22, 33, 44]
result = a[0..-2] + t #=> [1, 2, 3, 4, 11, 22, 33, 44]
a [0..- 2] - операция среза, которая принимает все, кроме последнего элемента массива.
Надеюсь, что это поможет!
Этот вариант найдет 5
независимо от того, где он находится в массиве.
a = [1, 2, 3, 4, 5]
a[a.index(5)]=[11, 22, 33, 44] if a.index(5)
a.flatten!
Вот еще один простой способ заменить значение 5
в массиве:
a[-1, 1] = [11, 22, 33, 44]
Это использует метод Array#[]=
. Я не совсем уверен, почему это работает.
gweg, не уверен, что вы пытаетесь сделать здесь, но ищете ли вы что-то вроде этого?
a = [1, 2, 3, 4, 5]
a.delete_at(4)
a = a.concat([11,22,33,44])
Есть несколько способов сделать это - я не думаю, что код выше особенно приятен. Все зависит от значения "5" в вашем исходном массиве.