每个之间的区别和下面的代码选择?红宝石

JaT*_*aTo 0 ruby iterator

我仍然试图找出每个之间的差异,并在阅读文档后选择.

有人可以向我解释为什么每个和select都可以在下面的代码中替换?我不明白为什么选择使用然后代码编写器将它放在一个数组?另外,了解他们之间差异的好方法是什么.

def word_unscrambler(str, words)
  str_letters = str.split("").sort

  anagrams = []
  words.select do |word|
    word_letters = word.split("").sort
    anagrams << word if str_letters == word_letters
  end

  anagrams
end
Run Code Online (Sandbox Code Playgroud)

lur*_*ker 5

虽然它以相同的方式迭代each,但目的select是基于选择标准返回集合.在该特定的代码片段中,它根据anagrams << word if str_letters == word_letters每个的真值返回一个集合,word然后丢弃该集合.

或者,它可以这样做:

def word_unscrambler(str, words)
  str_letters = str.split("").sort

  words.select { |word| str_letters == word.split("").sort }
end
Run Code Online (Sandbox Code Playgroud)

正如已经说过的,代码的作者显然不明白它是如何select工作的.