我有2D阿雷與此類似:最快的方式從二維數組中獲取值
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
獲取所有「A」從該數組的長度爲0.比從其他列獲得腐蝕編碼值。 這是超過6k值的大2d數組。但設計與上述完全相同。我曾嘗試2種方法至今:
第1種方法:使用循環來遍歷所有的值:
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;
}
}
第二個方法:創建列表和不是通過所有的值會:
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));
它們似乎都很慢,效率不夠高。有沒有更好的方法來做到這一點?
我不能看看爲什麼第二個選項的所有開銷會更快,甚至包括LINQ,如果你需要原始的性能,它永遠不會是你想要去的地方 – usr
這兩個代碼片段做不同的事情,令人困惑。 – usr