ruby-on-rails – 用于在字符串数组中对字符串进行分组的Ruby方法

我实现了一个分组字谜的功能.
简而言之:

输入:[‘cars’,’for’,’potato’,’racs’,’four’,’scar’,’cream’,scream’]

输出:[[“cars”,“racs”,“scar”],[“four”],[“for”],[“potato”],[“cream”,“scream”]]

我想知道是否有更好的方法来做到这一点.
我真的认为我使用了太多的重复陈述:直到,选择,
delete_if.
有没有办法组合select和delete_if语句?那
意味着,可以自动删除所选项目吗?

码:

def group_anagrams(words)
  array = []
  until words.empty? 
    word = words.first
    array.push( words.select { |match| word.downcase.chars.sort.join.eql?(match.downcase.chars.sort.join ) } )
    words.delete_if { |match| word.downcase.chars.sort.join.eql?(match.downcase.chars.sort.join ) }
  end
  array
end

提前致谢,

解决方法

像那样:
a = ['cars','for','potatoes','racs','four','scar','creams','scream']
 a.group_by { |element| element.downcase.chars.sort }.values

输出是:

[["cars","racs","scar"],["for"],["potatoes"],["four"],["creams","scream"]]

如果你愿意,你可以将这种单行程转变为一种方法.

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...