如何在没有初始预处理的情况下在Ruby中进行sort_by(a,the等)

Joh*_*yde 1 ruby ruby-on-rails

我有一系列制造商,其中一些在其官方名称的开头使用"The".人们通过实际名称来引用它们,并select在"M"下查找名称,但它在"T"下面

例如莫里茨刺绣公司

我正在考虑获取每个名称,将其转换为数组.split(" ")并删除"the"(.delete("The"))然后再次加入,然后排序,但这似乎是错误的方法.

Ser*_*sev 5

我正在考虑获取每个名称,将其转换为带有.split("")的数组并删除"the"(.delete("The"))然后再次加入,然后排序,但这似乎是错误的方式去做这个.

这被称为Schwartzian变换,它是ruby的sort_by的强大之处.

(无耻地窃取复制一些@ mudasobwa的代码)

 input = ["The Moritz", "A Moritz", "The Embroidery Company"]
 input.sort # => naive sort, ["A Moritz", "The Embroidery Company", "The Moritz"]
 input.sort_by { |str| str.gsub(/\A(The|A)\s+/, '') } # sort without prepositions
 # => ["The Embroidery Company", "The Moritz", "A Moritz"]
Run Code Online (Sandbox Code Playgroud)