複数のコレクションをforeachで同時に扱いたいけどいい方法はないかな
LINQのZipメソッドを利用することで、複数のコレクションを合体させて一度に処理することができます。
目次
Zipで合体させる
Zipメソッドを利用してコレクションを合体させるというのは、.netではあまり一般的ではないかもしれませんが、Pythonなんかではよく利用されている手法なので、.netでも利用したいという方は増えて来ているのではないかなと思います。
.netでもZipメソッドを利用することで複数コレクションを簡単に合体させて扱うことができます。
以下が利用例になります。
private void button1_Click(object sender, EventArgs e)
{
var name = new string[] { "田中", "佐藤", "森田" };
var score = new int[] { 30, 40, 50 };
//LINQのZIPでマージする
var results = name.Zip(score, (n, s) => new { Name = n, Score = s });
foreach (var X in results)
{
MessageBox.Show("Name:" + X.Name + "| 点数:" + X.Score);
}
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim name = New String() {"田中", "佐藤", "森田"}
Dim score = New Integer() {30, 40, 50}
'LINQのZIPでマージする
Dim results = name.Zip(score, Function(n, s) New With {.Name = n, .Score = s})
For Each X In results
MsgBox("Name:" & X.Name & "| 点数:" & X.Score)
Next
End Sub
CHECK
複数のコレクションを合体させたい場合は、1コレクションごとにZipメソッドを繋げる(Item.Zip(省略).Zip(省略))ことでいくつでも合体させることができます。
リスキリングでキャリアアップしてみませんか?
リスキリング(学び直し)は、経済産業省が推奨しており、
今だけ、最大70%のキャッシュバックを受けることができます。
最大70%の給付金が出るおすすめのプログラミングスクール!
国策で予算が決められているため申し込みが多い場合は早期に終了する可能性があります!
興味のある方はすぐに確認しましょう。
Zipメソッドの定義
Zipメソッドは公式で以下のように紹介されています。
public static System.Collections.Generic.IEnumerable<TResult> Zip<TFirst,TSecond,TResult> (this System.Collections.Generic.IEnumerable<TFirst> first, System.Collections.Generic.IEnumerable<TSecond> second, Func<TFirst,TSecond,TResult> resultSelector);
Enumerable.Zip メソッド (System.Linq)
2 つのシーケンスの対応する要素に対して、1 つの指定した関数を適用し、結果として 1 つのシーケンスを生成します。
2 つのシーケンスの対応する要素に対して、1 つの指定した関数を適用し、結果として 1 つのシーケンスを生成します。
コメント