简体   繁体   English

转换列表的最佳方法<Tuple<double, double> &gt; 到 [,] 数组在 C#

[英]Best way to convert a List<Tuple<double, double>> to [,] array in C#

I am reading two columns of data from database, I want to create a multidimensional array [,] with pairs like,我正在从数据库中读取两列数据,我想创建一个multidimensional array [,]像这样的对,

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

As I do not know the size of database data I am using a list .由于我不知道数据库数据的大小,我使用的是列表

So I have所以我有

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++;
    }
}

How would I get result like:我将如何得到如下结果:

double[,] arr = new double[,] { 
{ 1.333,122.3 }, 
{ 2.343,142.3 }, 
...
{1.222,132.3}
};
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;
    }
}

In C# 7.0 or above:在 C# 7.0 或更高版本中:

var testTupleList = new List<(double, double)>() {
    (1.333,122.3),
    (2.343,142.3)
};

List<double[]> result =testTupleList.Select(data => data.ToTuple()
   .GetType()
   .GetProperties()
   .Select(property => property.GetValue(data.ToTuple()))
   .Cast<double>()
   .ToArray()).ToList();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM