Arrays 从具有特定索引的数组的数组中选择项
我想从索引位置0、2和4的每个arr数组中选择项目 输入数组Arrays 从具有特定索引的数组的数组中选择项,arrays,ruby,ruby-on-rails-4,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",
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"]
]
输出阵列
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"]
]
原始问题: 我想从索引位置1和5的每个arr数组中删除项目 我们可以利用它来实现这一目标。在这里:
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处的元素 我想从索引位置1和5的每个arr数组中删除项目 我们可以利用它来实现这一目标。在这里:
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处的元素作为删除不需要的项的替代方法,您可以只选择需要的项
arr.map{|subarray| subarray.values_at(0, 2, 4) }
# => [["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]
除了删除不需要的项目之外,您还可以选择所需的项目
arr.map{|subarray| subarray.values_at(0, 2, 4) }
# => [["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]
也可以使用
每个_切片
方法执行
如果可以将0、2、4个值视为一个每秒钟省略一个值的列表(\uuu
),则可以这样编写:
arr.map { |a| a.each_slice(2).map { |item, _| item } }
也可以使用
每个_切片
方法执行
如果可以将0、2、4个值视为一个每秒钟省略一个值的列表(\uuu
),则可以这样编写:
arr.map { |a| a.each_slice(2).map { |item, _| item } }
Ruby具有非常好的解构语法,因此您可以在一行代码中提取所有值:
a = 0.upto(5).to_a # => [0, 1, 2, 3, 4, 5]
x, _, y, _, z = a
x # => 0
y # => 2
z # => 4
下划线只是您不需要的值的占位符。Ruby具有非常好的解构语法,因此您可以在一行代码中提取所有值:
a = 0.upto(5).to_a # => [0, 1, 2, 3, 4, 5]
x, _, y, _, z = a
x # => 0
y # => 2
z # => 4
下划线只是您不需要的值的占位符。如果您想采用更通用的方法,只选择偶数列,您可以这样做
arr.map{|a| a.select.with_index { |e, i| i.even? }}
给
[["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]
如果你想让它更通用,只选择偶数列,你可以这样做
arr.map{|a| a.select.with_index { |e, i| i.even? }}
给
[["name", "contact", "state"], ["n1", "c1", "s1"], ["n2", "c2", "s2"]]
您不能在编辑中更改整个问题!如果需要,可以问一个新问题。new|arr=arr.collect{| item |[0],item[2],item[3]}?欢迎使用堆栈溢出。请阅读“包括链接页面和”。我们真的希望看到您在询问之前尝试解决此问题。如果没有这一点,看起来您没有尝试并希望我们为您编写代码,这不是堆栈溢出的目的。“”此外,您在编辑中对问题进行了重大更改。不要这样做,因为您的更改会使答案与您的问题不匹配,这会使寻找类似答案的任何人感到困惑。您不能在编辑中更改整个问题!如果需要,可以问一个新问题。new|arr=arr.collect{| item |[0],item[2],item[3]}?欢迎使用堆栈溢出。请阅读“包括链接页面和”。我们真的希望看到您在询问之前尝试解决此问题。如果没有这一点,看起来您没有尝试并希望我们为您编写代码,这不是堆栈溢出的目的。“”此外,您在编辑中对问题进行了重大更改。不要这样做,因为您所做的更改会使答案与您的问题不匹配,这会使正在寻找类似答案的任何人感到困惑。输出数组中不包含“状态”question@RakeshPatidar我的回答中已经提到了这一点。请看,我并不是故意粗鲁,但在编辑中完全更改问题是错误的,您以后应该避免这样做。对不起@shivam,我会处理好的。输出数组在我的question@RakeshPatidar我的回答中已经提到了这一点。看,我不是想粗鲁,但在编辑中完全改变问题是错误的,你以后应该避免这样做。对不起@shivam,我会处理好的。我非常怀疑这是最初的意图。相反,你误解了。你能想象一个数据处理任务,它以“好的,这是一个数据集,让我们把它的每一列,不管它是什么”开头吗?谢谢你指出这一点。我看到了0、2、4个值,并将它们作为列表处理,每一秒都省略一个值。是的。我刚刚就这么做了,我很怀疑这是否是我的初衷。相反,你误解了。你能想象一个数据处理任务,它以“好的,这是一个数据集,让我们把它的每一列,不管它是什么”开头吗?谢谢你指出这一点。我看到了0、2、4个值,并将它们作为列表处理,每一秒都省略一个值。是的。我刚做了,我喜欢。也许
arr.map{| sub | sub.values_at(*(0..arr.size).step(2).to_a)}
更具概括性。@CarySwoveland:你似乎也从这个任意选择的索引中推断出了一个虚构的规则。虽然这个问题可以从更清晰的描述中受益,但它确实说了“从某些索引”。它没有说“从每一个其他的索引”。拉凯什和我有一个思想融合。事实上,我没有读这个问题,只有其他答案。我喜欢。也许arr.map{| sub | sub.values_at(*(0..arr.size).step(2).to_a)}
更具概括性。@CarySwoveland:你似乎也从这个任意选择的索引中推断出了一个虚构的规则。虽然这个问题可以从更清晰的描述中受益,但它确实说了“从某些索引”。它没有说“从每一个其他的索引”。拉凯什和我有一个思想融合。事实上,我没有读这个问题,只有其他答案。