2015-02-06 62 views
-1

我试图在引用块中的索引时对数组的某些元素进行操作。操作整个阵列上很容易在不改变索引的情况下操作数组元素

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

你的代码是无效的。 – sawa 2015-02-06 20:31:01

回答

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 
+0

这工作!谢谢。 – sarkon 2015-02-06 20:36:41

0

我不能从问题告诉你是否给定的值在数组中,并希望获得其索引, 或相反亦然。因此,我会为每项任务提供一种方法。我会用这个数组的例子:

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]] 
+0

是的!我认为必须有这样的解决方案。谢谢。 – sarkon 2015-02-09 04:52:37

+0

我想我需要一个更一般的解决方案。这只有在我知道arr中要处理的元素的值时才有效。但是,如果a)我只知道位置(例如,我想要索引x处的元素的值),该怎么办? – sarkon 2015-02-09 22:09:23

+0

我做了一个编辑来解决你的问题。 – 2015-02-09 22:36:19

相关问题