C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 【C#】文字列のListからの抽出方法について


(過去ログ 169 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■97644 / inTopicNo.1)  【C#】文字列のListからの抽出方法について
  
□投稿者/ にゃあ (1回)-(2021/06/20(Sun) 00:01:40)

分類:[C#] 

文字のListの中に、一致する文字列があれば抽出する処理を作成しています。
例えば以下のような処理で、カンマ区切りのデータを抽出する方法がわからず投稿いたしました。

サンプルを以下に記載します。
「0,1,2」も抽出できるようにするにはどうすればよいのかご教示いただけないでしょうか。

■サンプル
void Main()
{
	string[] src = {"0","2"};
	List<string> tgt = new List<string>();
	tgt.Add("3");
	tgt.Add("0,1,2");
	tgt.Add("2");
	foreach (var data in tgt)
	{
		var match1 = Array.IndexOf(src, data);
		var match2 = src.Contains(data);
		Console.WriteLine(data + ":" + match1);
		Console.WriteLine(data + ":" + match2);
	}
}
■サンプル実行結果
3:-1
3:False
0,1,2:-1
0,1,2:False
2:1
2:True
のようになります。

引用返信 編集キー/
■97646 / inTopicNo.2)  Re[1]: 【C#】文字列のListからの抽出方法について
□投稿者/ 魔界の仮面弁士 (3136回)-(2021/06/20(Sun) 09:13:30)
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); }

引用返信 編集キー/
■97651 / inTopicNo.3)  Re[2]: 【C#】文字列のListからの抽出方法について
□投稿者/ にゃあ (2回)-(2021/06/21(Mon) 01:36:02)
魔界の仮面弁士 さん

案B1がまさにやりたかった処理です。

ありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -