ruby – 在字符串中旋转字母,以便每个字母被n个位置移动到另一个
我的任务是想出一种编码字符串的方法.除其他外,我需要将每个字母移动一个给定的数字,但转换后的字母必须是一个字母(循环移位).
到目前为止我有以下代码: def play_pass(str,n) letters = ('a'..'z').to_a str.chars.map {|x| letters.include?(x.downcase) ? (x.ord + n).chr : x}.join end 这适用于大多数字母 我的问题是,如果我试图将y移动2个位置,我应该得到一个但是我得到了这个角色[ 我哪里错了? 解决方法
试试这个:
def play_pass(str,n) letters = ('a'..'z').to_a str.chars.map {|x| letters.include?(x.downcase) ? letters[letters.find_index(x.down_case) + n - letters.size] : x}.join end p play_pass("abcdefghijklmnopqrstuvwxyz",2) 产量 "cdefghijklmnopqrstuvwxyzab" [Finished in 0.3s] 这个怎么运作 letters是一个字符a到z的数组,就像OP在代码中的方式一样. 例如:在OP指出的场景中,如果要移位的字符是y,那么在字母中添加2的索引将给我们移位索引26(24是字母数组中y的索引,2是数字字符我们在测试用例中移位) – 为了使字母表现得像圆形数组,并且不遇到索引超出绑定类型的异常,我们从26移位索引中减去letters.size.因此,我们得到索引0,它代表char a,这是我们感兴趣的. 另一个例子是a的情况 – 这里移位的索引将是0 2 = 2.当我们从中减去letters.size时,我们得到-24. Ruby允许负数索引,其中数组元素的查找是从反向完成的,它将解析为纠正元素.索引-1与索引(大小-1)相同,类似地,-size的索引值等于索引0. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |