我试图在引用块中的索引时对数组的某些元素进行操作。操作整个阵列上很容易在不改变索引的情况下操作数组元素
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.each_with_index { |num, index| puts "#{num}, "#{index}" }
但是如果我想与元素4
,只是工作6
返回
4, 3
6, 5
我可以创建原始的某些元素组成的新数组和运行该块,但索引更改。
如何选择元素及其索引?
我试图在引用块中的索引时对数组的某些元素进行操作。操作整个阵列上很容易在不改变索引的情况下操作数组元素
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.each_with_index { |num, index| puts "#{num}, "#{index}" }
但是如果我想与元素4
,只是工作6
返回
4, 3
6, 5
我可以创建原始的某些元素组成的新数组和运行该块,但索引更改。
如何选择元素及其索引?
只要把一个条件就可以了:
indice = [3, 5]
arr.each_with_index do
|num, index| puts "#{num}, #{index}" if indice.include?(index)
end
这是另一种风格:
indice = [3, 5]
arr.each_with_index do
|num, index|
next unless indice.include?(index)
puts "#{num}, #{index}"
end
这工作!谢谢。 – sarkon 2015-02-06 20:36:41
我不能从问题告诉你是否给定的值在数组中,并希望获得其索引, 或相反亦然。因此,我会为每项任务提供一种方法。我会用这个数组的例子:
arr = [1, 2, 3, 4, 5, 6, 7, 8]
值以指数
如果您在给定的值:
vals = [4, 6]
可以检索像这样数量指数对:
可直接打印:vals.each { |num| puts "#{num}, #{arr.index(num)}" }
# 4, 3
# 6, 5
#=> [4, 6]
如果vals
中的元素不是在目前的arr
:
vals = [4, 99]
vals.map { |num| [num, arr.index(num)] }
#=> [[4, 3], [99, nil]]
指数以价值
如果你给出指标:
indices = [3, 5]
可以检索索引值对像t他的:
indices.zip(arr.values_at(*indices))
#=> [[3, 4], [5, 6]]
然后以您喜欢的任何格式打印。
如果索引超出范围,nil
将返回:
indices.zip(arr.values_at(*[3, 99]))
#=> [[3, 4], [5, nil]]
你的代码是无效的。 – sawa 2015-02-06 20:31:01