概要
LinqのWhere句を使用すればList
そこで、拡張メソッドを使用してこの処理を実現しました。
作成した拡張メソッド
- 「ContainFirstIndex」List
から指定した文字列を含む先頭の要素番号をint型で取得できます。ただし、指定した文字列を含む要素が存在しない場合は-1が戻り値となります。 - 「ContainIndexs」ではList
から指定した文字列を含む全ての要素番号をList 型で取得 できます。ただし、指定した文字列を含む要素が存在しない場合はnullが戻り値となります。
using System.Collections.Generic; public static class ListStringExtensions { //List<string>から指定した文字列を含む先頭の要素番号を取得 public static int ContainFirstIndex(this List<string> list, string keyword, int startIndex = 0) { for (int i = startIndex; i < list.Count; i++) { if (list[i].Contains(keyword)) { return i; } } return -1; } //List<string>から指定した文字列を含む全ての要素番号を取得 public static List<int> ContainIndexs(this List<string> list, string keyword, int startIndex = 0) { List<int> indexList = new List<int>(); for (int i = startIndex; i < list.Count; i++) { if (list[i].Contains(keyword)) { indexList.Add(i); } } //空の場合はnullを返す if (indexList.Count == 0) { return null; } return indexList; } }
使用例
①「ContainFirstIndex」の使用例
using System.Collections.Generic; using System; public class Sample1 { public static void Main() { List<string> strs = new List<string>() { "本日は晴天なり", "赤い靴", "とうもろこし", "My name is Bob", "夕焼けは赤い", }; //ContainFirstIndexを使用 Console.WriteLine("ContainFirstIndexのテスト"); //「赤い」という単語を検索 int i = strs.ContainFirstIndex("赤い"); Console.WriteLine($"「赤い」を含んだ語を{i}番目で発見"); //「赤い」という単語を検索(2番目の要素から検索) int j = strs.ContainFirstIndex("赤い", 2); Console.WriteLine($"2番目の要素から検索すると、「赤い」を含んだ語を{j}番目で発見"); //「name」という単語を検索 int k = strs.ContainFirstIndex("name"); Console.WriteLine($"「name」を含んだ語を{k}番目で発見"); //「青」という単語を検索(存在しない単語) int l = strs.ContainFirstIndex("青"); Console.WriteLine($"「青」を含んだ語を{l}番目で発見"); } }
実行結果
ContainFirstIndexのテスト 「赤い」を含んだ語を1番目で発見 2番目の要素から検索すると、「赤い」を含んだ語を4番目で発見 「name」を含んだ語を3番目で発見 「青」を含んだ語を-1番目で発見
②「ContainIndexs」の使用例
using System.Collections.Generic; using System; public class Sample2 { public static void Main() { List<string> strs = new List<string>() { "本日は晴天なり", "赤い靴", "とうもろこし", "My name is Bob", "夕焼けは赤い", }; //ContainFirstIndexを使用 Console.WriteLine("ContainIndexsのテスト"); //「赤い」という単語を検索 List<int> list0 = strs.ContainIndexs("赤い"); Console.WriteLine($"「赤い」を含んだ語を次の位置で発見"); foreach (var i in list0) Console.Write($"{i}, "); //「赤い」という単語を検索(2番目の要素から検索) List<int> list1 = strs.ContainIndexs("赤い", 2); Console.WriteLine($"\n\n2番目の要素から検索すると、「赤い」を含んだ語を次の位置で発見"); foreach (var i in list1) Console.Write($"{i}, "); //「name」という単語を検索 List<int> list2 = strs.ContainIndexs("name"); Console.WriteLine($"\n\n「name」を含んだ語を次の位置で発見"); foreach (var i in list2) Console.Write($"{i}, "); //「青」という単語を検索(存在しない単語) List<int> list3 = strs.ContainIndexs("青"); if (list3 == null) Console.WriteLine($"\n\n「青」を含んだ語は存在しない"); } }
実行結果
ContainIndexsのテスト 「赤い」を含んだ語を次の位置で発見 1, 4, 2番目の要素から検索すると、「赤い」を含んだ語を次の位置で発見 4, 「name」を含んだ語を次の位置で発見 3, 「青」を含んだ語は存在しない