2015-05-09 37 views
4

我想知道这是否有意义或如果语法是错误的,基本上如果这是可以接受的。我想在数组的迭代中嵌套if/else条件。嵌套,如果其他内部。每个迭代

def change_numbers(first_array, second_array) 
    second_array.each do |index| 

    if first_array[index] == 0 
     first_array[index] = 1 
    else 
     first_array[index] = 0 
    end 

    end 
end 

该阵列是一个简单的(二进制)阵列,将只包含0和1的,我想使用第二个数组的元素是第一组的,我要改变的指标。

例子:

first_array = [0, 0, 0, 0, 1, 1, 1, 1, 1] 
second_array = [3, 5, 7] 

结果:

first_array = [0, 0, 0, 1, 1, 0, 1, 0, 1] 
+0

我看不出什么错,但你可能要检查是否在'first_array'的索引存在。 – Mischa

+0

假设它被定义,这是一个可接受的方法吗?或者是有另一种做我想做的。对不起,我只是在学习基础知识,我很感激帮助! – Jeff

+0

我确定有其他方法不涉及if/else,但这是一个可接受的方法。 – Mischa

回答

1

你可以试试这个 -

def change_numbers(first_array, second_array)  
    second_array.each do |index| 
    first_array[index] = ((first_array[index] == 0) ? 1 : 0) 
    end 
end 
+0

完全忘记了条件运算符..非常感谢! :) – Jeff

+0

我的荣幸@Jeff ...........经验让你更好........ :) –

2

如果你不想使用if/else语句,你可以这样做:

second_array.each do |index| 
    first_array[index] = (first_array[index] + 1) % 2 
end 
+0

谢谢!!我从来没有这样过,但这真的很有帮助! – Jeff

+1

或'(first_array [index] - 1).abs' – steenslag

2

一个bit-wise XOR

ar = [0, 0, 0, 0, 1, 1, 1, 1, 1] 
indices = [3, 5, 7] 

indices.each{|i| ar[i] ^= 1 } 
+0

是的,这是我正在寻找的运营商。 – Mischa

+0

@steenslag,你能解释一下吗?或者将我链接到文档?这看起来像一个很酷的概念,我想进一步理解它。我尝试了谷歌上的第一对夫妇的链接,但它只是我不能理解的例子。 – Jeff

+0

@Jeff,它在Fixnum类中定义,但文档没有帮助。与1异或是一种众所周知的翻转技术;添加到维基百科的链接。 – steenslag

2
def change_numbers(first_array, second_array) 
    second_array.each { |index| first_array[index] = 1 - first_array[index] } 
end 
+0

另一个解决方法,会从来没有想过这样。感谢您的洞察! – Jeff