我有一个“简单”的红宝石测验这个例子。如果它等于(==)array1的值和array2的值,我想重新分配一个数组的值(例如word1 [0])。看看代码,以便它是显而易见的:红宝石测验 - 重新分配数组值与while循环
array1 = Array.new
array1 = ('A'..'Z').to_a
array2 = Array.new
array2 = ('A'..'Z').to_a
array2 = array2.rotate(2)
puts "enter a word:"
word1 = gets.chomp
word1 = word1.upcase.split(//)
n = 0
word1.each do
while n < 26
if word1[n] == array1[n]
word1[n] = array2[n]
end
n += 1
end
end
puts word1 # This word should now be "encoded" and not easy to read.
我曾尝试这个代码,它那种随机改变只有1-2个字母我输入(gets.chomp)任何字。
因此,word1是一个我期待的数组,每个元素(字母)与array1 [0]进行比较,如果相等,则它将被重新赋值给array2 [0]的值。如果word1 [0]和array1 [0]不相等,那么'n'的值改变+1,并且块再次运行。
注意:我不想为这个问题有一个简单的公式,我想真正理解这里发生了什么,以及为什么我的每一次迭代不像我期望的那样工作。所以如果你能以“我的知识水平”来回答这个问题,那真是太棒了!
请不要把这个评论看作是冒犯性的,但是:(1)更短并不意味着更简单,(2)它仍然比应该复杂得多(你使用upto/case/(3)这段代码实际上不会**回答你的问题 - 它回答了你产生问题的问题,但是,当你使用非常奇怪的方式时,string-> array是一个没有循环的单行代码。不是问题,(4)我并不需要从“接受”的答案中得到15rep,但我认为在几个月之后重新分配点数是不恰当的 - 对于之前的答案,您似乎很满意,那么为什么要回溯到时间? ;) – quetzalcoatl 2013-05-08 17:10:59
不要删除你的答案/代码,只需擦亮它!删除那个奇怪的字符串到数组的转换(String类有'each_char'方法),并改变upto(25)-case-当进行一些合理的查找时,可以使用一个简单的散列或'index'方法。真的,没有必要到处循环;) – quetzalcoatl 2013-05-08 17:12:44
你是对的,我的答案仍然可以重构。但作为一个红宝石初学者,我更容易理解,这就是为什么我想发布它。我会在接下来的几天内重构它。感谢您的积极反馈!谢谢你的帮助 – rubybrah 2013-05-08 23:37:11