2

我有两个数组:

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

根据第二个数组的索引,从第一个数组创建一个新数组的最短、最干净的方法是什么?我想做这样的事情:

["mo", "tu", "we", "th", "fr", "sa", "su"][[1, 5]](这种方式不可能)

这将产生["tu", "sa"].

怎么可能做到这一点?提前致谢!

4

2 回答 2

5

尝试如下使用Array#values_at

a = ["mo", "tu", "we", "th", "fr", "sa", "su"] 
b= [1, 5]
c = a.values_at(*b) 
# => ["tu", "sa"]
于 2013-07-20T15:05:20.277 回答
2

select并且with_index可以链接以从数组中提取某些元素:

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

对于 Ruby 新手,这里有一些关于这个答案的注释:

  1. 第一个块变量表示一周中的天数(“mo”、“tu”等)并且没有使用,但约定是将变量命名为“_”
  2. with_index方法可以与任何出色的 Ruby 迭代器链接,以访问索引(类似于each_with_index)。在这种情况下,没有select_with_index,所以我们使用select.with_index
于 2013-07-20T15:12:21.410 回答