私はこれに似た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));
どちらも遅く、十分に効率的ではないようです。これを行うより良い方法はありますか?