2012-04-26 32 views
-3

大寫單詞必須先行
安德魯淨安德烈·安德魯
安德魯安德魯·安德烈淨
如何排列字的排列alphabiticaly,但考慮字母的情況?

UPD:

安德魯網安德雷 - 安德魯
安德魯·安德雷 - 安德魯淨

+0

我不知道紅寶石,但我會通過解析字符的ASCII或UTF和訂購去。 – 2012-04-26 12:57:20

+0

你的意思是隻有當一個字母是相同的或者是什麼時,一個字母大寫都可以使用? – 2012-04-26 12:58:54

+3

你有我的-1。 'androy'在'andrew'之前是沒有辦法的,所以清理你的問題,無論如何,我的回答應該指向你正確的方向。 – 2012-04-26 16:52:35

回答

7

你可以兩個連續的標準:首先是字母(不區分大小寫),然後是字母(與大小寫)。 Array#sort_by非常適合這些:

%w[andrew Net andrey Andrew].sort_by{|w| [w.downcase, w]} 
# => ["Andrew", "andrew", "andrey", "Net"] 
+0

** andrew Net androy Andrew> Andrew androy andrew Net **這是怎麼回事? – Tensho 2012-04-26 13:28:17

+0

@Tensho'%w [andrew Net androy Andrew] .sort_by {| w | [w.downcase,w]}'讓你'[「Andrew」,「andrew」,「androy」,「Net」]',而不是'Andrew androy andrew Net'。 – 2012-04-27 06:03:04

0
b = a.sort { |x,y| (z = x[0].upcase <=> y[0].upcase) == 0 ? x <=> y : z } 
+0

解釋和答案更有幫助 – 2012-04-27 12:59:09

0
%w[andrew Net andrey Andrew].sort_by(&:downcase)