使用Linq迭代元组列表中的列

时间:2015-08-01 19:42:16

标签: c# linq iterator tuples

我有List<Tuple<string[], double[]>>

的列表
List<Tuple<string[], double[]>> tt = new List<Tuple<string[], double[]>>();

var t1 = new Tuple<string[], double[]>(
    new string[] { "java", "c#", "nn" },
    new double[] { 2, 3, 0 });

var t2 = new Tuple<string[], double[]>(
    new string[] { "java", "c#", "nn" },
    new double[] { 0, 3, 1 });

var t3 = new Tuple<string[], double[]>(
    new string[] { "java", "c#", "nn" },
    new double[] { 2, 1, 0 });

tt.Add(t1);
tt.Add(t2);
tt.Add(t3);   

假设我想将double[]中的每个元素除以列中的总计数非零count。我会得到以下结果

t1 2/2, 3/3 0/1
t2 0/2, 3/3 1/1   
t3 2/2, 1/3 0/1 

这是我尝试过的,但它会计算行总数而不是列

var XX = (from tuples in tt
          let rows = tuples.Item2.ToArray()
          let result = rows.Select(x => x/rows.Count(i => i != 0)).ToArray()
         select new Tuple<string[], double[]>(tuples.Item1, result)
       ).ToList();

1 个答案:

答案 0 :(得分:2)

使用以下LINQ查询可以实现您要做的事情:

List<Tuple<string[], double[]>> result = tt.Select(x => 
    Tuple.Create(
        x.Item1, 
        x.Item2.Select((y, i) => y / tt.Count(z => z.Item2[i] > 0))
    .ToArray())).ToList(); 

以下是打印到控制台的结果双打:

enter image description here