C#/VB リスト・配列データを昇順・降順並び替えて取得する(ラムダ式)

リスト・配列データを並び順を昇順や降順に並び替えるにはどうしたらいいですか?

LINQラムダ式のOrderby区で昇順、OrderByDescending区で降順に並び替えることができます。

目次

OrderbyとOrderByDescendingで昇順・降順に並び替える

 LINQラムダ式のorderby区を利用することで、コレクションを昇順に並び替えることができます。

・C#の場合
コレクション.OrderBy(x => x.ソート対象).ToList()
・VB.NETの場合
コレクション.OrderBy(function(x) x.ソート対象).ToList()

OrderByDescending区を利用することで、コレクションを降順に並び替えることができます。

・C#の場合
コレクション.OrderByDescending(x => x.ソート対象).ToList()
・VB.NETの場合
コレクション.OrderByDescending(function(x) x.ソート対象).ToList()

List<int> lstItem = new List<int>() { 3,2,1,4 };

var ret = lstItem.OrderBy(x => x).ToList();
ret.ForEach(x => Debug.WriteLine(x));

//出力
//1
//2
//3
//4

ret = lstItem.OrderByDescending(x => x).ToList();
ret.ForEach(x => Debug.WriteLine(x));

//出力
//4
//3
//2
//1
Dim lstItem As New List(Of Integer)() From {3, 2, 1, 4}
Dim ret = lstItem.OrderBy(Function(x) x).ToList()
ret.ForEach(Sub(x) Debug.WriteLine(x))

'出力
'1
'2
'3
'4

ret = lstItem.OrderByDescending(Function(x) x).ToList()
ret.ForEach(Sub(x) Debug.WriteLine(x))

'出力
'4
'3
'2
'1

複数の対象のソートはThenBy区を使う

 複数の対象のソートには昇順はThenBy区で対象分繋ぐことで、2番目以降の条件を指定することができます。また、降順の場合はThenByDescending区を利用します。

//昇順
List<(int,int)> lstItem = new List<(int,int)>() { (3,100),(3,200),(4,500),(4,700) };
var ret = lstItem.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList();
ret.ForEach(x => Debug.WriteLine(x));

//出力結果
//(3, 100)
//(3, 200)
//(4, 500)
//(4, 700)

//降順
ret = lstItem.OrderByDescending(x => x.Item1).ThenByDescending(x => x.Item2).ToList();
ret.ForEach(x => Debug.WriteLine(x));

//出力結果
//(4, 700)
//(4, 500)
//(3, 200)
//(3, 100)
Dim lstItem As List(Of (Integer, Integer)) = New List(Of (Integer, Integer))()
lstItem.Add((3, 100))
lstItem.Add((3, 200))
lstItem.Add((4, 500))
lstItem.Add((4, 700))

//昇順
Dim ret = lstItem.OrderBy(Function(x) x.Item1).ThenBy(Function(x) x.Item2).ToList()
ret.ForEach(Sub(x) Debug.WriteLine(x))
//出力結果
//(3, 100)
//(3, 200)
//(4, 500)
//(4, 700)


//降順
ret = lstItem.OrderByDescending(Function(x) x.Item1).ThenByDescending(Function(x) x.Item2).ToList()
ret.ForEach(Sub(x) Debug.WriteLine(x))

//出力結果
//(4, 700)
//(4, 500)
//(3, 200)
//(3, 100)

リスキリングでキャリアアップしてみませんか?

リスキリング(学び直し)は、経済産業省が推奨しており、

今だけ、最大70%のキャッシュバックを受けることができます。

リスキリング 給付金が出るスクール紹介

最大70%の給付金が出るおすすめのプログラミングスクール!

国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!

興味のある方はすぐに確認しましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次