Reputation: 40345
I'm having a little trouble figuring out how to call the Parallel.ForEach
with a 2D array of strings:
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
}
});
If I don't specify the type explicitly I get the following error:
The type arguments for method 'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable, System.Action)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
What's the proper way to specify the type arguments explicitly?
Upvotes: 4
Views: 6403
Reputation: 128327
You should still be able to make this work with a multi-dimensional array, just using Parallel.For
instead of 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"}
};
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
}
}
);
Upvotes: 3
Reputation: 71935
The problem for you is that 2-dimensional arrays do not implement IEnumerable<one-dimensional-array>
. (It does implement IEnumerable
, but it's an IEnumerable
of strings that "flattens" the array.) You can do two things:
Change the string[,]
to a jagged array-of-arrays, string[][]
.
Implement your own extension method that iterates over a two-dimensional array and turns it into an IEnumerable<one-dimensional-array>
.
Upvotes: 6