如何从数组中提取特定元素?

时间:2012-01-19 06:14:09

标签: ruby arrays subset

如果我有一个数组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]

3 个答案:

答案 0 :(得分:21)

您可以这样做:

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

答案 1 :(得分:10)

这是一种方式:

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

答案 2 :(得分: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]