Domanda

Sto avendo un piccolo problema di capire come chiamare il Parallel.ForEach con una serie 2D di stringhe:

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
        }
    });
.

Se non specifico il tipo esplicitamente ottenuto il seguente errore:

.

Il tipo argomenti per il metodo 'System.Threading.tasks.parellel.Fieach (System.Collections.Generic.Inumerable, System.ation) 'non può essere dedotto dall'utilizzo.Provare Specifica degli argomenti del tipo esplicitamente.

Qual è il modo corretto per specificare gli argomenti del tipo esplicitamente?

È stato utile?

Soluzione

Il problema per voi è che gli array 2-dimensionali non implementano IEnumerable<one-dimensional-array>.(Implementa IEnumerable, ma è un IEnumerable di stringhe che "appiattisce" l'array.) Puoi fare due cose:

    .
  • Modificare il string[,] in un array di array frastagliati, string[][].

  • Implementa il proprio metodo di estensione che itera su un array bidimensionale e lo trasforma in un IEnumerable<one-dimensional-array>.

Altri suggerimenti

Dovresti ancora essere in grado di fare questo lavoro con un array multidimensionale, solo usando Parallel.For invece di 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
        }
    }
);
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top