はじめに
以前C#のListの反転については書いたのですが、
ちょっと追加したい内容があったので、今回は書き直し記事的なやつです。
List の反転
前の記事の通り、ListにはReverseという中身の順番を反転させるメソッドがあります。
//リストを作成 List<int> list = new List<int>(){1, 2, 3}; //中身を列挙 foreach (int num in list) { print(num); } //反転 print("反転"); list.Reverse(); //反転した中身を列挙 foreach (int num in list) { print(num); }
ただ、中身の順序はそのままに取得する順番だけ反転させたい場合もあります。
そんな時はforのインディックスを逆順にするのが一番簡単です。
//リストを作成 List<int> list = new List<int>(){1, 2, 3}; //後ろから列挙 for (int i = list.Count - 1; i >= 0; i--) { print(list[i]); }
もっとスマートにしたい場合はLINQのReverseを使う方法もありますが、
そのまま使おうとすると、ListのReverseが優先されてしまうため、
AsEnumerableを使って、一旦ListをEnumerable化する必要があります。
//リストを作成 List<int> list = new List<int>(){1, 2, 3}; //後ろから列挙 foreach (var num in list.AsEnumerable().Reverse()) { print(num); }
ちなみに外部からAddやRemoveが出来ないようにListのIEnumerableだけを公開している場合には
そのままLINQのReverseが使えるという利点もあったりします。
/// <summary> /// Listを持ったクラス /// </summary> public class ListClass { //ListのIEnumerable部分だけ公開 private List<int> _list = new List<int>(){1, 2, 3}; public IEnumerable<int> List => _list; }
//Listを持ったクラス作成 var listClass = new ListClass(); //後ろから列挙 foreach (var num in listClass.List.Reverse()) { print(num); }