-1

我有一个array1初始化为 19 位长的0数组 ( ) 和另一个clave64 位长的数组 ( )。我想迭代超过array164 次,同时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

有没有更清洁的方法来做到这一点......?

4

2 回答 2

1

我能想到一些改进。

  1. 将所有变量名命名为更有意义的名称。里面有什么@array1?整数?考虑调用它@ints。将数组称为复数名称很好。如果可能的话,j也是如此。i

  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?那有什么意义呢?

祝你好运,该代码需要认真工作。

于 2013-03-03T18:22:44.723 回答
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
于 2013-03-03T18:30:17.530 回答