从具有特定索引的数组的数组中选择项目

时间:2016-09-30 10:47:21

标签: arrays ruby ruby-on-rails-4

我想从索引位置0,2和4的每个arr数组中选择项目

输入数组

arr = [
  ["name", "address", "contact", "company", "state"],
  ["n1", "add1", "c1", "cp1", "s1"],
  ["n2", "add2", "c2", "cp2", "s2"] 
]

输出数组

arr = [
  ["name", "contact", "company"],
  ["n1", "c1", "cp1"],
  ["n2", "c2", "cp2"]
]

5 个答案:

答案 0 :(得分:4)

作为删除不需要的项目的替代方法,您只需选择所需的项目即可。

arr.map{|subarray| subarray.values_at(0, 2, 4) }
# => [["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]

答案 1 :(得分:2)

如果你想把这个更通用,只选择偶数列你就可以这样做

arr.map{|a| a.select.with_index { |e, i| i.even? }}

给出了

[["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]

答案 2 :(得分:1)

原始问题:

  

我想从索引位置1和5

中删除每个arr数组中的项目

我们可以使用delete_if来实现这一目标。这里:

arr.map { |a| a.delete_if.with_index { |el, index| [1,5].include? index } }
# => [["name", "contact", "company", "state"], ["n1", "c1", "cp1", "s1"], ["n2", "c2", "cp2", "s2"]]

PS:有问题的输出与索引1和2处的数组不一致,例如删除索引4处的元素

答案 3 :(得分:1)

也可以使用each_slice方法执行。

如果0,2,4值可以作为列表处理,省略每一个值(_),可以写成:

arr.map { |a| a.each_slice(2).map { |item, _| item } }

答案 4 :(得分:1)

Ruby具有非常好的解构语法,因此您可以在一行中提取所有值:

a = 0.upto(5).to_a # => [0, 1, 2, 3, 4, 5]
x, _, y, _, z = a

x # => 0
y # => 2
z # => 4

下划线只是您不需要的值的占位符。