2013-07-20 2 views
2

Я два массива:Как найти элементы в массиве с другим массивом индексов?

["mo", "tu", "we", "th", "fr", "sa", "su"] и [1, 5]

Что самый короткий, самый чистый способ сделать новый массив из первого массива, на основе показателей второго массива? Я хотел бы сделать что-то вроде этого:

["mo", "tu", "we", "th", "fr", "sa", "su"][[1, 5]] (не возможно этот путь)

Это даст ["tu", "sa"].

Как это можно сделать? Заранее спасибо!

ответ

5

Попробуйте это, как показано ниже, используя Array#values_at

a = ["mo", "tu", "we", "th", "fr", "sa", "su"] 
b= [1, 5] 
c = a.values_at(*b) 
# => ["tu", "sa"] 
+2

+1 для 'values_at'. –

2

select и with_index может быть прикован к срывать некоторые элементы из массива:

["mo", "tu", "we", "th", "fr", "sa", "su"].select.with_index {|_, index| [1, 5].include?(index)} 
# => ["tu", "sa"] 

Вот несколько нот на этот ответ для Руби новичков:

  1. Первая переменная блока представляет собой дни o («mo», «tu» и т. д.) и не используется, но соглашение заключается в названии переменной «_»
  2. Метод with_index может быть соединен цепью с любым из великолепных итераторов Ruby для получения доступа к индексу (аналогично each_with_index). В этом случае нет select_with_index, поэтому мы используем select.with_index.
Смежные вопросы