2016-09-19 77 views
0

我讀從數據庫中兩列數據,我想創建一個像對的multidimensional array [,]的最佳方式[,]數組在C#

double[,] arr = new double[,] { {val1,val2},{val1,val2}...{val1,val2} }; 

由於我不知道數據庫數據的大小,我正在使用列表

所以我

List<Tuple<double, double>> Aux = new List<Tuple<double, double>>(); 

//THIS EMULATES READING DATABASE 
Aux.Add(new Tuple<double, double>(1.333,122.3)); 
Aux.Add(new Tuple<double, double>(2.343,142.3)); 
... 
Aux.Add(new Tuple<double, double>(1.222,132.3)); 
if (Aux.Count > 0) 
{ 
    int index = 0; 
    foreach (Tuple<double, double> item in Aux) 
    { 
     res[index, 0] = item.Item1; 
     res[index, 1] = item.Item2; 
     index++; 
    } 
} 

我怎麼會得到類似結果:

double[,] arr = new double[,] { 
{ 1.333,122.3 }, 
{ 2.343,142.3 }, 
... 
{1.222,132.3} 
}; 
+0

'雙[] []數組= Aux.Select(X =>新的[] {X .Item1,x.Item2})。ToArray();' –

+0

@LB如何獲得[,]而不是[] []? – Edgar

+3

@ L.B多維和鋸齒陣列之間存在差異。 – MarcinJuraszek

回答

1
var inputData = Enumerable.Range(1, 10000) 
          .Select(i => Tuple.Create(10d * i, 1d * i)) 
          .ToList(); 

{ // fastest 
    var outputData = new double[inputData.Count, 2]; 
    var index = 0; 
    foreach (var item in inputData) 
    { 
     outputData[index, 0] = item.Item1; 
     outputData[index, 1] = item.Item2; 
     index++; 
    } 
} 

{ // slightly slower 
    var outputData = new double[inputData.Count, 2]; 
    for (var index = inputData.Count - 1; index > -1; index--) 
    { 
     var tupple = inputData[index]; 
     outputData[index, 0] = tupple.Item1; 
     outputData[index, 1] = tupple.Item2; 
    } 
} 

{ // much slower 
    var outputData = new double[inputData.Count, 2]; 
    foreach (var item in inputData.Select((v, i) => new { Value = v, Index = i })) 
    { 
     outputData[item.Index, 0] = item.Value.Item1; 
     outputData[item.Index, 1] = item.Value.Item2; 
    } 
}