|
■No97644 (にゃあ さん) に返信 > 「0,1,2」も抽出できるようにするにはどうすればよいのかご教示いただけないでしょうか。
「1024」に対して合致したとみなすかどうかが分からなかったので、 いろいろなパターンで書いてみました。
// これらの文字があれば抽出 string[] src = { "0", "2" };
// 探索先のリスト var tgt = new List<string> { "1024", "3", "0,1,2", "2", "768" } ;
Console.WriteLine("=== グループA:「1024」の 0 や 2 も含める");
Console.WriteLine("------ 案A1:合致するかどうか各アイテムごとを判定"); foreach (var dataA1 in tgt) { Console.WriteLine(dataA1 + " => " + src.Any(dataA1.Contains)); }
Console.WriteLine("------ 案A2:合致したアイテムだけを取り出す"); var dataA2 = tgt.Where(e => src.Any(e.Contains)).ToList(); dataA2.ForEach(Console.WriteLine);
Console.WriteLine("------ 案A3:合致したアイテムとそのインデックスを取り出す"); var dataA3 = tgt.Select((x, i) => (x, i)).Where(e => src.Any(e.x.Contains)).ToDictionary(e => e.i, e => e.x); foreach (var x in dataA3) { Console.WriteLine("{0}: {1}", x.Key, x.Value); }
Console.WriteLine(); Console.WriteLine("=== グループB:「1024」の 0 や 2 は含めない");
Console.WriteLine("------ 案B1:合致するかどうか各アイテムごとを判定"); foreach (var dataB1 in tgt) { Console.WriteLine(dataB1 + " => " + src.Any(dataB1.Split(',').Contains)); }
Console.WriteLine("------ 案B2:合致したアイテムだけを取り出す"); var dataB2 = tgt.Where(e => src.Any(e.Split(',').Contains)).ToList(); dataB2.ForEach(Console.WriteLine);
Console.WriteLine("------ 案B3:合致したアイテムとそのインデックスを取り出す"); var dataB3 = tgt.Select((x, i) => (x, i)).Where(e => src.Any(e.x.Split(',').Contains)).ToDictionary(e => e.i, e => e.x); foreach (var x in dataB3) { Console.WriteLine("{0}: {1}", x.Key, x.Value); }
|