4 votes

Comment appeler Parallel.ForEach avec un tableau multidimensionnel

Je rencontre un peu de difficulté à trouver comment appeler le Parallel.ForEach avec un tableau 2D de chaînes de caractères :

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)
        {
            // trouver toutes les séquences valides
        }
    });

Si je ne spécifie pas le type explicitement, j'obtiens l'erreur suivante :

Les types d'arguments pour la méthode 'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable, System.Action)' ne peuvent pas être inférés à partir de l'utilisation. Essayez de spécifier explicitement les types d'arguments.

Quelle est la manière appropriée de spécifier explicitement les types d'arguments ?

6voto

mquander Points 32650

Le problème pour vous est que les tableaux bidimensionnels ne mettent pas en œuvre IEnumerable. (Il met en œuvre IEnumerable, mais c'est un IEnumerable de chaînes qui "aplatit" le tableau.) Vous pouvez faire deux choses:

  • Changez le string[,] en un tableau de tableaux, string[][].

  • Implémentez votre propre méthode d'extension qui itère sur un tableau bidimensionnel et le transforme en un IEnumerable.

3voto

Dan Tao Points 60518

Vous devriez encore être capable de faire fonctionner cela avec un tableau multi-dimensionnel, en utilisant simplement Parallel.For au lieu de 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];
            // faites ce que vous devez faire ici
        }
    }
);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X