Как извлечь определенные элементы из массива? - PullRequest
1 голос
/ 19 января 2012

Если у меня есть массив a = [1,2,3,4,5,6,7,8,9,10], и я хочу подмножество этого массива - 1-й, 5-й и 7-й элементы.Можно ли извлечь их из этого массива простым способом.Я думал что-то вроде:

a[0,4,6] = [1,5,7]

, но это не работает.

Также есть ли способ вернуть все индексы, кроме указанных?Например, что-то вроде

a[-0,-4,-6] = [2,3,4,6,8,9,10]

Ответы [ 4 ]

21 голосов
/ 19 января 2012

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

[1] pry(main)> [1,2,3,4,5,6,7,8,9,10].values_at(0, 4, 6)
=> [1, 5, 7]
10 голосов
/ 19 января 2012

Вот один из способов:

[0,4,6].map{|i| a[i]}
3 голосов
/ 19 января 2012
a = [1,2,3,4,5,6,7,8,9,10]

Для [0,4,6] = [1,5,7]:

a.values_at(0, 4, 6)
=> [1, 5, 7]

Для [-0, -4, -6] = [2,3,4,6,8,9,10]:

a - a.values_at(0, 4, 6)
=> [2, 3, 4, 6, 8, 9, 10]
1 голос
/ 19 января 2012

В Ruby объекты Array имеют метод / оператор [], который позволяет получать / ссылаться на объект по определенному индексу или непрерывному подмножеству объектов, определенных диапазоном.

ary[index] → obj or nil
ary[start, length] → new_ary or nil
ary[range] → new_ary or nil

Лично мне нравится ваш синтаксис. Это было бы полезно, но не предоставляется стандартным объектом Array. Пока Ruby не примет ваш синтаксис, как предлагали другие, у вас есть метод values_at, чтобы делать именно то, что вам нужно.

values_at(selector,... ) → new_ary

Если a = [1,2,3,4,5,6,7,8,9,10], то:

a.values_at(0, 4, 6)
=> [1, 5, 7]
...