4

Parallel.ForEach文字列の 2D 配列でを呼び出す方法を理解するのに少し苦労しています。

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)' の型引数は、使用法から推測できません。型引数を明示的に指定してみてください。

型引数を明示的に指定する適切な方法は何ですか?

4

2 に答える 2

6

問題は、2 次元配列が を実装していないことIEnumerable<one-dimensional-array>です。(これは を実装しますが、配列を「平坦化」するのは文字列IEnumerableのです。) 次の 2 つのことを行うことができます。IEnumerable

  • string[,]をギザギザの配列の配列 に変更しますstring[][]

  • 2 次元配列を反復処理して に変換する独自の拡張メソッドを実装しますIEnumerable<one-dimensional-array>

于 2010-07-20T01:10:00.843 に答える
3

Parallel.Forの代わりに使用するだけで、多次元配列でこれを機能させることができるはず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
        }
    }
);
于 2010-07-20T01:28:35.613 に答える