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

iterating over columns in a list of tuples with Linq

我有一个列表 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();

可以使用以下 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(); 

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