【问题标题】:iterating over columns in a list of tuples with Linq使用 Linq 遍历元组列表中的列
【发布时间】:2015-08-01 19:42:15
【问题描述】:

我有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[] 中的每个元素除以列中非零counts 的总数。我会得到以下结果

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();

【问题讨论】:

    标签: c# linq iterator tuples


    【解决方案1】:

    您想要做的事情可以通过以下 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(); 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2019-11-16
      • 2013-04-07
      • 1970-01-01
      • 2019-11-23
      相关资源
      最近更新 更多