删除仅在数组中有所不同的字符串值(Ruby)

时间:2012-11-18 21:24:54

标签: ruby arrays anagram

所以,这是前言:

我是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是上面提到的字典。

我应该做些什么来将这些案件扔掉?我想到的东西似乎对我来说太笨重了。提前谢谢!

2 个答案:

答案 0 :(得分:0)

这样做你想要的吗?

def print_anagram(anagram_dict)
  anagram_list = anagram_dict.values.uniq{|word| word.downcase}
  # rest of your code

答案 1 :(得分: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

这是做什么的:

  • 使所有字符串小写

  • 只获取数组中的唯一元素

  • 如果您只有一个唯一元素,则所有元素都相同

map(&:downcase)是一种较短的做法:map { |element| element.downcase }