2013-04-23 2 views
2

сказать, что я ...Reposition элемент в массиве

arr = ["a", "b", "c"] 

... и я хочу, чтобы переместить «а» между «б» и «в». я в настоящее время сделать

arr.delete("a") 
arr.insert(2, "a") 

Могу ли я сделать это в одной операции?

Благодаря

+0

Он должен быть на месте? Зачем? – tokland

ответ

2

Вам не нужно повторять "a". Поместите их в одном:

arr.insert(2, arr.delete("a")) 
+0

Спасибо! Это сделает работу. – dublxdad

2

Если вы хотите переместить «а» между «б» и «в», то вы должны сделать:

arr.insert(1, arr.delete_at(0)) 

※ Используйте .delete_at вместо .delete, потому что у вас может быть несколько 'a' в вашем массиве.

-1

Использование Array#shuffle!

arr = [ "a","b","c" ] 
arr.shuffle! until arr[1] == 'a' && arr[0]=='b' 
p arr #=> ["b", "a", "c"] 
0

Вставьте после б, независимо от того, где они находятся в массиве:

arr.insert(arr.index("b"), arr.delete_at(arr.index("a"))) 
=> ["b", "a", "c"] 

Вы также можете сделать:

arr[arr.index("a")], arr[arr.index("b")] = "b","a" 
3

Вы можете использовать параллельно присвоение:

arr[0], arr[1] = arr[1], arr[0] 
=> ["b", "a"] 
arr 
=> ["b", "a", "c"]