如何在ruby中为字符串定义自定义哈希?

时间:2015-03-28 21:11:41

标签: ruby hash

我想在每个字符串中的字符中使用无顺序对ruby中的字符串进行哈希处理,例如我希望所有字谜都具有相同的哈希值。

这可能吗?

3 个答案:

答案 0 :(得分:1)

怎么样:

require 'digest'

string = "MySuperSampleString"
sorted = string.chars.sort.join

p sorted
# => => "MSSSaeegilmnpprrtuy"

Digest::MD5.hexdigest(sorted)
# => "ef86bea3ade82ae7bf0409952bc83fd7"
  • chars"分裂"字符串到字母
  • sort对字母数组进行排序
  • join将字母数组连接成一个字符串

希望有所帮助!

答案 1 :(得分:0)

如果用例实际上是用于字谜,您可能还想使用.downcase.gsub(/\s+/, ""),以便Torchwood == Doctor Who。即:

string.downcase.gsub(/\s+/,"").chars.sort.join

答案 2 :(得分:0)

是的,可以使用group_by。只需一行代码。 :)

实施例

words =  ['demo', 'none', 'tied', 'evil', 'dome', 'mode', 'live',
          'fowl', 'veil', 'wolf', 'diet', 'vile', 'edit', 'tide',
          'flow', 'neon']

groups = words.group_by { |word| word.split('').sort }

返回:

{[“d”,“e”,“m”,“o”] => [“demo”,“dome”,“mode”],[“e”,“n”,“n” ,“o”] => [“none”,“neon”],[“d”,“e”,“i”,“t”] => [“捆绑”,“饮食”,“编辑” ,“潮”,[“e”,“我”,“l”,“v”] => [“邪恶”,“活着”,“面纱”,“邪恶”],[“f”,“ l“,”o“,”w“] => [”fowl“,”wolf“,”flow“]}

groups.each { |x, y| p y } 

返回:

[“demo”,“dome”,“mode”]

[“none”,“neon”]

[“捆绑”,“饮食”,“编辑”,“潮”]

[“邪恶”,“活着”,“面纱”,“卑鄙”]

[“fowl”,“狼”,“流”]