Linqで項目間に区切りを入れる
LinqでIEnumerableの各項目の間に区切りを入れるメソッドを C# で作ってみた。
using System.Collections.Generic; namespace DelimitItemsByLinq { public static class EnumerableExtension { /// <summary> /// 指定の<param name="enumerable" />の各項目の間に、<param name="delimiter" />を挿入します。 /// </summary> public static IEnumerable<T> Delimit<T>(this IEnumerable<T> enumerable, T delimiter) { bool afterSecond = false; foreach (T item in enumerable) { if (afterSecond) { yield return delimiter; } yield return item; afterSecond = true; } } } }
- メソッド Delimit
は、IEnumerable の拡張メソッド。 - 指定の IEnumerable
の各要素 item を yield return で返す。 - 2番目以降の item の前に、指定の区切り delimiter を yield return で返す。
このメソッドの使用例は、以下の通り。区切りを入れたい IEnumerable に対して、このメソッド Delimit を呼び出し、引数として区切りを指定する。
using System; using System.Collections.Generic; namespace DelimitItemsByLinq { class Program { static void Main(string[] args) { string[] strArray = { "one", "two", "three" }; IEnumerable<string> delimitedStrEnumerable = strArray.Delimit(", "); foreach (string str in delimitedStrEnumerable) { Console.Write(str); } Console.WriteLine(); // 出力は "one, two, three" } } }