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.uniq{|word| word.downcase}
  # rest of your code
于 2012-11-18T21:33:35.060 に答える
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

これは何をしますか:

  • すべての文字列を小文字にします

  • 配列から一意の要素のみを取得します

  • 一意の要素が1つしかない場合、すべての要素は同じです

map(&:downcase)行うためのより短い方法です:map { |element| element.downcase }

于 2012-11-18T21:34:47.950 に答える