【问题标题】:How to sort array of words into arrays of anagrams in Ruby?如何在Ruby中将单词数组排序为字谜数组?
【发布时间】:2023-03-09 15:26:01
【问题描述】:

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]}

标签: ruby arrays string hash anagram


【解决方案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

【讨论】:

  • 检查重复的问题以查看更好的方法:stackoverflow.com/questions/9646995/ruby-way-to-do-this
  • +1,只是在寻找 group_by 选项来纠正我的自我 :) 我要把这个留在这里,我不想复制其他人的代码,尽管我确实想用 @987654323 做点什么@。寻找更好选择的每个人都可以查看@toklands 链接。 thnx @tokland
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
相关资源
最近更新 更多