Ruby键使用拆分和连接

Mik*_*les 2 ruby

我这里有笔试,这是指令.

编写一个程序,打印出作为字谜的单词组.字谜是单词中具有相同字母但按不同顺序排列的单词.您的输出应如下所示:

["demo", "dome", "mode"]
["neon", "none"]
Run Code Online (Sandbox Code Playgroud)

(等等)

以下是此解决方案:

words =  ['demo', 'none', 'tied', 'evil', 'dome', 'mode', 'live',
          'fowl', 'veil', 'wolf', 'diet', 'vile', 'edit', 'tide',
          'flow', 'neon']


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)

我一直试图理解ruby代码解决方案,但不能轻易掌握它.我的一个问题是result如果没有密钥或任何元素包含它,你如何测试哈希.另外一件事是怎么回事.join和.sort适用于此代码.

我真的很困惑这一切都是通过答案.有人可以在一个外行人的术语中逐行解释这个代码一个像我这样的假人的初学者可以理解吗?

spi*_*ann 7

我会这样做:

words =  ['demo', 'none', 'tied', 'evil', 'dome', 'mode', 'live',
      'fowl', 'veil', 'wolf', 'diet', 'vile', 'edit', 'tide',
      'flow', 'neon']

words.group_by { |word| word.chars.sort }.values

#=> [["demo","dome","mode"],["none","neon"],["tied","diet","edit","tide"],["evil","live","veil","vile"],["fowl","wolf","flow"]]
Run Code Online (Sandbox Code Playgroud)

  • [Enumerable](http://ruby-doc.org/core-2.3.1/Enumerable.html)确实让这种事情变得非常容易. (2认同)