如何在Ruby中将单词数组排序为字谜数组?

Posted

技术标签:

【中文标题】如何在Ruby中将单词数组排序为字谜数组?【英文标题】:How to sort array of words into arrays of anagrams in Ruby? 【发布时间】:2013-03-29 03:22:36 【问题描述】:

http://spark-university.s3.amazonaws.com/berkeley-saas/homework/hw1.pdf

尝试完成此作业的第 3 部分。下面的代码好像不行,即对于参数['HeLLo', 'hello'],返回[["hello"], ["HeLLo"]]而不是[["HeLLo", "hello"]]

def combine_anagrams(words)
    #iterate through words, make hashmap with the sorted version
    hash = 
    words.each do |x|
        hash[x.chars.sort.join.downcase.gsub /\W/, ""] = []
    end

    #iterate through words, access hashmap and append curr to array
    words.each do |x|
        hash[x.chars.sort.join.downcase.gsub /\W/, ""] << x
    end

    hash.values #return array of values
end

任何帮助将不胜感激。 (我是 Ruby 新手)

【问题讨论】:

给我们输入字符串和预期的输出。 前几天有人问过这个问题,搜索一下。另外,如果你想分组,也许group_by 方法是你应该看的。 试试这个hash.values.flatten(1).reverse.each_cons(2) |x| p [x] 重复:***.com/questions/9646995/ruby-way-to-do-this 【参考方案1】:

您可以像这样轻松地做到这一点:

def combine_anagrams(words)
  anagrams=
      words.each do |word|
        anagrams[word.downcase.split('').sort.join] ||=[]
        anagrams[word.downcase.split('').sort.join] << word 
      end
      anagrams.values
end

【讨论】:

检查重复的问题以查看更好的方法:***.com/questions/9646995/ruby-way-to-do-this +1,只是在寻找 group_by 选项来纠正我的自我 :) 我要把这个留在这里,我不想复制其他人的代码,尽管我确实想用 @987654323 做点什么@。寻找更好选择的每个人都可以查看@toklands 链接。 thnx @tokland

以上是关于如何在Ruby中将单词数组排序为字谜数组?的主要内容,如果未能解决你的问题,请参考以下文章

在没有排序函数的数组中对字符串进行排序 - Ruby

从数组中删除仅大小写不同的字符串值(Ruby)

如何在Ruby中按降序对数组进行排序

ruby:对符号数组进行排序

如何返回数组中出现次数最多的字谜列表?

在Ruby中对数组使用冒泡排序方法[关闭]