C#の任意ソートの話

今日はあまりコーディングしてたわけではないのでちょっとだけ
List<int>を訳ありでちょっと特別なルールでソートしたかった(できればスマートに)話,,,,

今回準備されたリストは正数(0~34),負数(-1~-28)が混ざっておりました.それを以下のようなイメージで正数,負数を分けて,なおかつ正数は昇順,負数は降順にソートしてくっつけたい...みたいなね

[0,1,2,3,.......34,-1,-2,-3,........-28]

納期との兼ね合いもあってスマートにしている暇はなく本能のままに書いたのがこちら

list.Sort((a,b) =>
{
   if(a*b<0)
   {
       a < 0 ? return (Math.Abs(a) + 34).CompareTo(b) : return a.CompareTo(Math.Abs(b) + 34);
   }
   else
   {
       return (Math.Abs(a)).CompareTo(Math.Abs(b));
   }
});

もう負数が出てくる比較のときだけ下駄を履かせようとしただけの単純なソート式.
本番のコードでは下駄の34はもちろんべた書きではなく,リストの最大値をとってましたが.....
かなり汚い....

どうしたらもっと美しくかけるのですかね,,,,,


将来この記事を見返したときに笑いながら修正できるようなスキルを身に着けていこうと思います

この記事が気に入ったらサポートをしてみませんか?