C#のLINQの関数であるReverse()
の使い方についてです。
配列やリストの要素の順番を反転することが出来ます。
この記事には.NET Framework 4.6.1を使用しています。
順番を反転する
配列やリストの要素の順番を逆からにしたい!
そんなときはLINQのReverse()
ですよ。
public static IEnumerable<TSource> Reverse<TSource>( this IEnumerable<TSource> source );
Enumerable.Reverse(TSource) メソッド (IEnumerable(TSource)) (System.Linq)
呼ぶだけで簡単に逆になったシーケンスを取得することが出来ます。
注意してほしい点は、List<T>
クラスに関してはReverse()
という名前の関数を所持しているため、LINQのReverse()
を使う場合はAsEnumerable()
を使ってください。
Program.cs
using System.Linq; using System.Collections; using System.Collections.Generic; public static class Program { static void Main( string[] args ) { int[] dataA = new int[] { 0, 1, 2, 3, 4 }; List<float> dataB = new List<float>() { 1.5f, 1.3f, 3.2f }; string[] dataC = new string[] { "正一郎", "清次郎", "誠三郎", "征史郎" }; // 反転!(ListはReverse()を持っているため、AsEnumerable()を使ってLINQのReverse()を使うようにしています) IEnumerable<int> dataA_R = dataA.Reverse(); IEnumerable<float> dataB_R = dataB.AsEnumerable().Reverse(); IEnumerable<string> dataC_R = dataC.Reverse(); System.Console.WriteLine( "dataA :{0}", dataA.Text() ); System.Console.WriteLine( "dataA Reverse:{0}", dataA_R.Text() ); System.Console.WriteLine( "dataB :{0}", dataB.Text() ); System.Console.WriteLine( "dataB Reverse:{0}", dataB_R.Text() ); System.Console.WriteLine( "dataC :{0}", dataC.Text() ); System.Console.WriteLine( "dataC Reverse:{0}", dataC_R.Text() ); // 入力待ち用 System.Console.ReadKey(); } /// <summary> /// 簡易的なシーケンスのテキスト取得処理 /// </summary> public static string Text( this IEnumerable i_source ) { string text = string.Empty; foreach( var value in i_source ) { text += string.Format( "[{0}], ", value ); } return text; } } // class Program
dataA :[0], [1], [2], [3], [4],
dataA Reverse:[4], [3], [2], [1], [0],
dataB :[1.5], [1.3], [3.2],
dataB Reverse:[3.2], [1.3], [1.5],
dataC :[正一郎], [清次郎], [誠三郎], [征史郎],
dataC Reverse:[征史郎], [誠三郎], [清次郎], [正一郎],
こんな感じでReverse()
を七兆回使って世界を反転させてみてください。
LINQのリンク
- LINQ一覧
www.urablog.xyz