这是一个方法的代码,该方法最终应该将一个加扰的单词与一个小的"字典进行比较。单词并返回单词,解读。请记住,此方法不完整。
def word_unscrambler(str, words)
p words
comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
p words
string = str.chars.join
comparison.each_index do |i|
return words[i] if string == comparison[i]
end
end
当我使用irb和一个水果列表测试方法时,参数"单词",第一个" p单词"输出:
["apple", "orange", "pineapple"]
第二个" p字"输出:
["aelpp", "aegnor", "aeeilnppp"]
我很困惑数组的值"字"在"比较"的赋值语句后更改。是的,"比较"被分配给" words"的修改,但根据我的经验,赋值语句只为赋值运算符左侧的变量赋值。 虽然这与我在编程时所学到的一切都有所不同,但我试图隔离"单词"通过制作具有相同值的另一个数组,称为" copy"。通过对我的代码的这种修改,我仍然得到了"单词"重新分配的值。我必须忽略方法参数或变量的一些基本方面。
那么,是什么导致了变化?
答案 0 :(得分:1)
仔细观察你的比较=行:
comparison = words.each_index {|i| words[i] = words[i].chars.sort.join}
在each_index块中,您将更改数组中每个字符串的值:
words[i] = words[i].chars.sort.join
这是用单词修改每个字符串。所以你会期待" apple"成为" aelpp"
要构建新数组并将其分配给比较,您可能需要take a look at the map method。
comparison = words.map { |word| word.chars.sort.join }
这将创建并分配一个新数组进行比较,看起来就像是第二个p语句的输出。