2015-08-27 5 views
2

Дано:Нажмите массив в массив на рубин лишь на одном уровне

a = [[1,"a"],[2,"b"]] 
b = [[3,"c"],[4,"d"]] 

Я хочу, чтобы превратить a в [[1,"a"],[2,"b"][3,"c"],[4,"d"]]. Как это сделать без +? Он создает новый массив, которого я хочу избежать.

(a << b).flatten(1) 
# => [1, "a", 2, "b", [3, "c"], [4, "d"]] 
+0

Обратите внимание, что ожидаемый 'a' недействителен. – sawa

ответ

2
a.concat(b) 

...............................

+0

, но он создает новый массив, которого я хочу избежать. – ZHH

+0

@ZHH Я понял и исправил это. – sawa

+0

'a.concat (b)' не создает новый массив? – ZHH

0

о чем?

a.push(b.shift) while b.any? 
+2

'a.push (* b)' намного хуже, чем ваш. – sawa

+0

@sawa, hah. Не знал об этом. Спасибо. –

1
a = [[1,"a"],[2,"b"]] 
b = [[3,"c"],[4,"d"]] 
a[a.length, 0] = b 
a 
# > [[1, "a"], [2, "b"], [3, "c"], [4, "d"]] 
+1

Узнал что-то новое. –

1

concat ответ, но вы можете сделать это:

a.object_id #=> 70223889895340 
a.replace(a+b) #=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]] 
a    #=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]] 
a.object_id #=> 70223889895340 
+0

хорошая техника! +1 от меня :) –

1
> b.inject(a, :<<) 
#=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]] 
+1

Elegant! ....... –

0

Как об этом?

a + b 
=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]] 
+0

'a + b' создает новый объект, который OP хотел избежать (т. Е.' (A + b) .object_I'd! = A. object_id'). –

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