我想从索引位置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"]
]
答案 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
下划线只是您不需要的值的占位符。