Если Вы интересуетесь наблюдением, как шаблон Делегата используется в реальном коде, посмотрите не далее, чем Какао на Mac OS X. Какао является предпочтительным инструментарием UI Apple для программирования в соответствии с Mac OS X и кодируется в Objective C. Это разработано так, чтобы каждый компонент UI был предназначен, чтобы быть расширенным через делегацию вместо разделения на подклассы или других средств.
Для получения дополнительной информации, я рекомендую проверить то, что Apple должна заявить о делегатах здесь .
Не уверен, что вы пытается заменить конкретное значение или нет, но это работает:
a = [1, 2, 3, 4, 5]
b = [11, 22, 33, 44]
a.map! { |x| x == 5 ? b : x }.flatten!
Это итерация по значениям a
, и когда он находит значение 5
, он заменяет это значение на array 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]
Этот вариант найдет 5
независимо от того, где он находится в массиве.
a = [1, 2, 3, 4, 5]
a[a.index(5)]=[11, 22, 33, 44] if a.index(5)
a.flatten!
Вам действительно не нужно сглаживать, если вы просто объединяете. Так что отсеките последний элемент от первого массива и объедините их:
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] - операция среза, которая берет все, кроме последнего элемента массива.
Надеюсь, это поможет!
gweg, не уверен, что вы здесь пытаетесь сделать, но ищете ли вы что-то вроде этого?
a = [1, 2, 3, 4, 5]
a.delete_at(4)
a = a.concat([11,22,33,44])
Есть несколько способов сделать это - я не думаю, что приведенный выше код выглядит особенно красиво. Все зависит от значения "5" в исходном массиве.