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

时间:2016-02-16 22:09:41

标签: arrays ruby

我正致力于创建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

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

1 个答案:

答案 0 :(得分:6)

你想要这样做:

alphabet[(alphabet.index(let) + num) % alphabet.length]

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