2013-03-03 64 views
-1

我有一个阵列(array1),它是19位长,初始化为0,另一个阵列(clave)是64位长。我想遍历array1 64次,而clave也被检查过。我这样做:遍历固定阵列

def fase2 
    j=0 
    for i in 0..63 
     @array1[j][email protected][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 

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

回答

1

我可以想到一些改进。

  1. 调用所有变量名称更有意义。 @array1中有什么?整型?考虑将其称为@ints。它很好地称为数组的复数名称。如果可能的话,ji也是如此。使用(0..63).each do |i|代替for i in 0..63。更像红宝石

  2. 使用运算符之间的间距,特别是等于。 j = 0j=0

  3. 小型判断条件可以走在一行:j = 0 if j > 19

  4. 为什么幻数?为什么18,17,16和13特别?把它们放在一个适当命名的数组开始,然后使用阵列#减少,像这样

    special_indeces = [18, 17, 16, 13] 
    
    ... and then in loop ... 
    
    xor = special_indeces.reduce do |val, index| 
        val^@array1[index].to_i 
    end 
    
  5. 什么是gets在结束了吗?那是什么意思?

祝你好运,那代码需要严重工作。

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