多次元配列でParallel.Foreachを呼び出す方法
-
17-09-2020 - |
質問
2Dの文字列の2D配列でParallel.ForEach
を呼び出す方法を考え出すほど問題があります。
string[,] board = new string[,]{
{"A", "B", "C", "D", "E" },
{"F", "G", "H", "I", "J"},
{"K", "L", "M", "N", "O"},
{"0", "1", "2", "3", "4"}};
Parallel.ForEach(board, row =>
{
for (int i = 0; i < row.Length; ++i)
{
// find all valid sequences
}
});
.
明示的にタイプを指定しない場合は、次のエラーが発生します。
メソッドの型引数 'system.threading.tasks.parallel.foreach(System.Collections.generic.Ienumerable、 System.Action) ''にはできません 使用法から推測されます。お試しください 型引数を指定する 明示的に
明示的な引数を指定するための適切な方法は何ですか?
解決
あなたの問題は、2次元配列がIEnumerable<one-dimensional-array>
を実装しないことです。(IEnumerable
を実装していますが、それは配列を「フラットする」文字列のIEnumerable
です。)2つのことができる:
-
string[,]
をギザギザの配列のアレイの配列、string[][]
に変更します。 -
2次元配列を介して反復する独自の拡張方法を実装し、それを
IEnumerable<one-dimensional-array>
にします。
他のヒント
Parallel.For
.string[,] board = new string[,] {
{"A", "B", "C", "D", "E" },
{"F", "G", "H", "I", "J"},
{"K", "L", "M", "N", "O"},
{"0", "1", "2", "3", "4"}
};
int height = board.GetLength(0);
int width = board.GetLength(1);
Parallel.For(0, height, y =>
{
for (int x = 0; x < width; ++x)
{
string value = board[y, x];
// do whatever you need to do here
}
}
);