使用 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();
以下是打印到控制台的结果双打:
我有一个列表 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();
以下是打印到控制台的结果双打: