我正在尝试对数组中的某些元素进行操作,同时在块中引用它们的索引。在整个阵列上操作很容易
arr = [1, 2, 3, 4, 5, 6, 7, 8]
arr.each_with_index { |num, index| puts "#{num}, "#{index}" }
但是如果我只想使用元素4
,6
来返回
4, 3
6, 5
我可以创建一个由原始元素组成的新数组,并在其上运行块,但随后索引会发生变化。
如何选择元素及其索引?
答案 0 :(得分:0)
只是说明一个条件:
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
答案 1 :(得分:0)
我无法从问题中判断出你是否在数组中给出了值并希望获得它们的索引,反之亦然。因此,我将为每项任务提出一种方法。我将使用此数组作为示例:
arr = [1, 2, 3, 4, 5, 6, 7, 8]
指数值
如果给你值:
vals = [4, 6]
您可以像这样检索数字索引对:
vals.map { |num| [num, arr.index(num)] }
#=> [[4, 3], [6, 5]]
或直接打印:
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]
您可以像这样检索索引值对:
indices.zip(arr.values_at(*indices))
#=> [[3, 4], [5, 6]]
然后以您喜欢的任何格式打印。
如果索引超出范围,将返回nil
:
indices.zip(arr.values_at(*[3, 99]))
#=> [[3, 4], [5, nil]]