オリンピックのメダル数を表示するウィジェットを作成しています。「country」オブジェクトのコレクションがあり、それぞれに「name」属性があり、メダル数には「gold」、「silver」、「bronze」があります。
リストは次のように並べ替える必要があります。1。最初にメダルの総数で並べ替える2.同じメダルの場合は、タイプで並べ替える(ゴールド>シルバー>ブロンズ、つまり2つのゴールド>1ゴールド+1シルバー)3。同じメダルとタイプの場合、サブ-アルファベット順に並べ替える
私はこれをルビーでやっていますが、言語は関係ないと思います。私は解決策を見つけましたが、それを行うにはもっとエレガントな方法があるはずだと感じたら。
これが私がしたことです:
加重メダルの合計を使用して仮想属性を作成します。したがって、2つの金と1つの銀がある場合、加重合計は「3.020100」になります。ゴールド1個とシルバー1個とブロンズ1個は「3.010101」になります
メダル数を最初に最も高く並べ替えたいので、リストはDESCで並べ替えられます。しかし、その後、アルファベット順にサブソートします(つまり、ASC)。そこで、単語をアルファ反転する関数を作成しました(つまり、 "canada" => "xzmzwz")
加重合計を文字列に変換し、逆の名前(つまり、「3010101xzmzwz」)を連結してから、降順で並べ替えます。出来上がり。
今までに、誰かが約2行のコードで同じことを行う方法を理解しました。私を啓発する気ですか?