2012-01-19 51 views
1

如果我有一個數組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] 

回答

10

這裏有一種方法:

[0,4,6].map{|i| a[i]} 
20

你可以簡單地做:

[1] pry(main)> [1,2,3,4,5,6,7,8,9,10].values_at(0, 4, 6) 
=> [1, 5, 7] 
+0

使用Pry +1 – horseyguy

1

在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] 
3
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]