如何在Ruby中有条件地重复循环?

And*_*zie 3 ruby arrays

我正在创建一个Caeser Cypher代码,我无法弄清楚如何让搜索循环"返回"我的字母数组中的"a".

这是我得到的:

    def ceaser_cypher(string, num)
      alphabet = ("a".."z").to_a
      letters = string.split("")
         letters.map!.with_index do |let,idxs|
           if alphabet.include?(let)
               alphabet[alphabet.index(let) + num]
           end
       end

    letters.join("")
    end
Run Code Online (Sandbox Code Playgroud)

就像大多数字母的魅力一样,但是对于"y"和"z",它们当然会返回nil,例如,num == 3因为字母数组中没有三个以上的索引; 而不是分别返回"b"或"c".那么如何才能让循环开始呢?

dav*_*ave 6

你会想做:

alphabet[(alphabet.index(let) + num) % alphabet.length]
Run Code Online (Sandbox Code Playgroud)

模数运算符将使其在超过数组长度时有效地"换行".