我正在構建一個小工具來顯示奧運獎牌數。我有一個「國家」對象的集合,每個對象都有一個「名稱」屬性,以及「金牌」,「銀牌」,「銅牌」的獎牌數量。按數字排序(最高優先),然後按字母排序(按字母順序排列)
列表應該被排序: 1.總徽章計數首先 2.如果相同獎牌,子排序類型 3(金>銀>青銅,即兩個金> 1個金+ 1銀)。如果相同的獎牌和類型,按字母順序排序
我在做這個紅寶石,但我認爲語言無所謂。我確實找出了一個解決方案,但是如果覺得必須有更加優雅的方式來做到這一點。
這裏就是我所做的:
創建加權獎牌總數虛擬屬性。所以如果他們有2金1銀,加權總數將是「3.020100」。 1金和1銀和1銅將會是「3.010101」
既然我們想按照最高的獎牌數排序,那麼排序是DESC。但是之後我們想按字母順序進行分類(即ASC)。所以我創建了一個函數,可以將一個單詞反轉(即「加拿大」=>「xzmzwz」)
將加權合計轉換爲字符串,concat反相名稱(即「3010101xzmzwz」),然後降序排序。瞧。
到目前爲止,有人已經想出瞭如何在大約2行代碼中做同樣的事情。照顧開導我?
這是特定於某個Ruby版本嗎?它似乎不適合我。 – Beanish 2010-02-09 21:33:45
它不應該。它適用於1.8.7和1.9,我沒有看到爲什麼它不適用於1.8.6。 'sort_by'絕對存在於1.8.6中,'Array#<=>'也是如此。 – sepp2k 2010-02-09 21:36:57
請注意,'sort_by'不就地排序。 – sepp2k 2010-02-09 21:37:46