我有ff数组:
words = ['demo', 'none', 'tied', 'evil', 'dome', 'mode', 'live',
'fowl', 'veil', 'wolf', 'diet', 'vile', 'edit', 'tide',
'flow', 'neon']
Run Code Online (Sandbox Code Playgroud)
而现在我正在尝试做这样的字谜:
["demo", "dome", "mode"]
["neon", "none"]
(etc)
Run Code Online (Sandbox Code Playgroud)
所以我得到了这段代码:
result = {}
words.each do |word|
key = word.split('').sort.join
if result.has_key?(key)
result[key].push(word)
else
result[key] = [word]
end
end
result.each do |k, v|
puts "------"
p v
end
Run Code Online (Sandbox Code Playgroud)
我理解这个词是如何分裂和加入的,但这部分对我来说并不清楚:
if result.has_key?(key)
result[key].push(word)
else
result[key] = [word]
end
Run Code Online (Sandbox Code Playgroud)
在它上面的代码是很明显,结果是空的散列现在我们要问,如果有通过排序/加入了按键的按键if result.has_key?(key)是如何运作的?为什么要通过单词迭代询问空哈希是否有所选键的键?
result[key].push(word)我也不清楚.那么这个代码将键作为键放在结果中?还是这个词本身?
result[key] = [word]这一个也.它是否在键中添加了数组内的单词?
对不起我有点困惑.
该results只在循环的第一次迭代空.这条线
if result.has_key?(key)
Run Code Online (Sandbox Code Playgroud)
如果是检查key在当前分拣信件建立word存在,并在当它是空的第一次迭代的情况下,是的,这显然是不是有这个时间,但它仍然需要检查每一个其他的时间太长.
现在,当一个特定的东西key尚未存在时results,将key被添加到results并且包含当前的新数组word被添加为该元素的值key,在该行中
result[key] = [word]
Run Code Online (Sandbox Code Playgroud)
当a key已经存在时results,这意味着已经有一个包含至少一个的数组word,所以当前的数据word被添加到该数组中
result[key].push(word)
Run Code Online (Sandbox Code Playgroud)
逐步完成正在发生的事情:
words = ['demo', 'neon', 'dome', 'mode', 'none']
// first iteration of the loop
word = 'demo'
key = 'demo' // the letters in "demo" happen to already be sorted
Is 'demo' a key in results?
results is currently {}
No, 'demo' is not a key in {}
Add 'demo' as a key, and add an array with 'demo' inside
results is now { 'demo' => ['demo'] }
// second iteration
word = 'neon'
key = 'enno'
Is 'enno' a key in results?
results is currently { 'demo' => ['demo'] }
No, 'enno' is not a key in { 'demo' => ['demo'] }
Add 'enno' as a key, and add an array with 'neon' inside
results is now { 'demo' => ['demo'], 'enno' => ['neon'] }
// third iteration
word = 'dome'
key = 'demo'
Is 'demo' a key in results?
results is currently { 'demo' => ['demo'], 'enno' => ['neon'] }
Yes, 'demo' is a key in { 'demo' => ['demo'], 'enno' => ['neon'] }
Add 'dome' to the array at key = 'demo'
results is now { 'demo' => ['demo', 'dome'], 'enno' => ['neon'] }
// ... and so on
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |