c# - 使用 Linq 迭代元组列表中的列

标签 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列中的 s。我会得到以下结果

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

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

enter image description here

关于c# - 使用 Linq 迭代元组列表中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31765508/

相关文章:

c++ - 列表的迭代器可以返回非常量引用吗?

javascript - 如何在 ES6 类方法中使用迭代器

c++ - 增加一个常量前向迭代器

c# - 获取 Azure 中的默认部署存储

c# - 如何通过属性名称调用属性的方法

c# - 为什么 System.Math 和例如 MathNet.Numerics 基于 double?

c# - LINQ子查询 "NOT IN"问题

c# - 将匿名类型的 List<object> 转换为 Dictionary<string, SortedList<DateTime, double>>

c# - 我的 wpf 动画代码有什么问题

C# 绘制多条线