Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从具有特定索引的数组的数组中选择项_Arrays_Ruby_Ruby On Rails 4 - Fatal编程技术网

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

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",

我想从索引位置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"]
]
输出阵列

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:你似乎也从这个任意选择的索引中推断出了一个虚构的规则。虽然这个问题可以从更清晰的描述中受益,但它确实说了“从某些索引”。它没有说“从每一个其他的索引”。拉凯什和我有一个思想融合。事实上,我没有读这个问题,只有其他答案。