1

私はこれに似た2次元配列を持っています:

string[,] arr = { 
                    { "A", "A", "A", "A", "A", "A", "A", "D", "D", "D", "D", "D", "D", "D", "D" }, 
                    { "1", "1", "1", "1", "1", "1", "1", "0", "0", "0", "0", "0", "0", "0", "0" },
                    { "2", "2", "2", "2", "2", "2", "2", "00", "00", "00", "00", "00", "00", "00", "00" }  
                };

上記の配列から次の結果を取得しようとしています:

A 1 2
A 1 2
A 1 2
A 1 2
A 1 2
A 1 2

長さ0の配列からすべての「A」を取得します。他の列からその値を取得するよりも。これは、6k を超える値を持つ大きな 2 次元配列です。しかし、デザインは上記とまったく同じです。これまでに2つの方法を試しました:

1 番目の方法: for ループを使用してすべての値を調べます。

var myList = new List<string>();
var arrLength = arr.GetLength(1)-1;
for (var i = 0; i < arrLength; i++)
{
    if (arr[0,i].Equals("A"))
        myList.Add(arr[0, i]);
    else
        continue;
    }
}

2番目の方法:リストを作成し、すべての値を調べるよりも:

var dataList = new List<string>();
var list = Enumerable.Range(0, arr.GetLength(1))
                     .Select(i => arr[0, i])
                     .ToList();

var index = Enumerable.Range(0, arr.GetLength(1))
                      .Where(index => arr[0, index].Contains("A"))
                      .ToArray();
var sI = index[0];
var eI = index[index.Length - 1];
myList.AddRange(list.GetRange(sI, eI - sI));      

どちらも遅く、十分に効率的ではないようです。これを行うより良い方法はありますか?

4

2 に答える 2