我有一個「簡單」的紅寶石測驗這個例子。如果它等於(==)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