1

所以,这是前言:

我是 Ruby 的初学者。我正在研究一个字谜查找脚本(在文本文件中查找所有字谜)。本质是:我创建了一个字典,其中键是单词代码,值是一个数组,其中包含引用此代码的单词。是这样的:{"abdeis"=>["abides", "biased"] ,"achr"=>["char"], ... }。最后我只是打印出长度> 1的值。到目前为止这么好。

这是交易:我想修改输出,以便省略这种情况:["Wood", "wood", "WooD"]- 仅在情况下都是不同的。但是这种情况应该保留:["Doom", "DooM", "mood"]

我目前的一段代码:

def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values
  anagram_list.each { |i|
    if i.length > 1
      print i.join("\t")
      print "\n"
    else
      next
    end
   }
end

anagram_dict 是上面提到的字典。

我应该做哪些检查才能扔掉这些箱子?我想到的东西对我来说似乎很笨重。提前致谢!

4

2 回答 2

0
def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values
  anagram_list.each do |i|
    next if i.map(&:downcase).uniq.length == 1

    if i.length > 1
      print i.join("\t")
      print "\n"
    else
      next
    end
  end
end

What this does:

  • make all Strings lowercase

  • get only unique elements from the array

  • if you only have one unique element, all elements are the same

map(&:downcase) is a shorter way of doing: map { |element| element.downcase }

于 2012-11-18T21:34:47.950 回答
0

这是做你想做的吗?

def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values.uniq{|word| word.downcase}
  # rest of your code
于 2012-11-18T21:33:35.060 回答