迭代一个固定的数组

时间:2013-03-03 17:46:48

标签: ruby arrays loops bits

我有一个初始化为array1的19位长的数组(0)和另一个64位长的数组(clave)。我想迭代array1 64次,同时检查clave。我这样做了:

def fase2
    j=0
    for i in 0..63
        @array1[j]=@array1[18].to_i^@array1[17].to_i^@array1[16].to_i^@array1[13].to_i^@clave[i].to_i
    j=j+1
    if j>19  
        j=0  
    end  
    end
    print @array1
    gets
end

有更简洁的方法吗??

2 个答案:

答案 0 :(得分:1)

我可以想到一些改进。

  1. 将所有变量名称称为更有意义的名称。 @array1中的内容是什么?整型?考虑称之为@ints。将数组称为复数名称是很好的。如果可能,ji也是如此。

  2. 使用(0..63).each do |i|代替for i in 0..63。更像红宝石

  3. 在运算符之间使用间距,尤其是等于。 j = 0不是j=0

  4. 小条件可以放在一行:j = 0 if j > 19

  5. 为什么神奇的数字?为什么18,17,16和13特别?将它们放在一个适当命名的数组中以启动,然后像这样使用Array#reduce

    special_indeces = [18, 17, 16, 13]
    
    ... and then in loop ...
    
    xor = special_indeces.reduce do |val, index|
      val ^ @array1[index].to_i
    end
    
  6. 最后gets是什么?有什么意义呢?
  7. 祝你好运,该代码需要认真的工作。

答案 1 :(得分:0)

这是未经测试的,但更多的是我如何编写内部循环:

def fase2
  @clave.each do |clave|
    (0..19).each do |j|
      @array1[j] = @array1[18].to_i ^ @array1[17].to_i ^ @array1[16].to_i ^ @array1[13].to_i ^ clave.to_i
    end
  end
  print @array1
  gets
end