检测多个字谜

时间:2017-09-28 10:14:44

标签: ruby algorithm methods

我想知道是否有人可以帮助我在一个大阵列中检测多个字谜。

我知道我可以使用以下内容进行基本检查:

x = "Red"
y = "der"

x.downcase.split("").sort == y.downcase.split("").sort

但是,我需要一些比这更复杂的东西的帮助。我目前拥有的是一个包含超过10,000个单词的大型数组,我正在寻找最简洁的方法来遍历数组并返回分离到不同列表中的所有字谜。

例如,让我们假装数组是:

["Red", "Blue", "uLeB", "der"]

它应该返回:

[["Red", "der"], ["Blue", "uLeB"]]

它们不必以数组形式返回 - 我只需要一种分离它们的方法。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您可以使用相同的逻辑,通过group_by对条目进行分组,而不是将每个单词与每个单词进行比较:

words = %w(Red Blue uLeB der)

words.group_by { |w| w.downcase.chars.sort }
#=> {
#  ["d", "e", "r"]      => ["Red", "der"],
#  ["b", "e", "l", "u"] => ["Blue", "uLeB"]
# }

答案 1 :(得分:0)

我建议使用Hash的另一种方法

h = Hash.new { |hash, key| hash[key] = [] }
array = ["Red", "Blue", "uLeB", "der"]
array.each {|e| h[e.downcase.split('').sort.join] << e }   

=> {"der"=>["Red", "der"], "belu"=>["Blue", "uLeB"]}