数据结构列表列表 – 如何使用linq访问?
我从一个访问文件的软件制造商处获得了ac#程序,并给出了一份数据结构列表
List<List> RasterSet = new List<List>();
这给了我一个“索引”的列表
RasterSet Count = 100 [0]Count = 400 [1]Count = 411
等等。 在那些我有另一个“索引”列表,其中包含实际的数据结构
[0] [X] [Y] [Z] ... [399] [X] [Y] [Z]
所以现在我需要访问列表列表中数据结构的X,Y,Z部分。 例如,是否可以使用LINQ来表示
if (RasterSet[i] >= 0 && Rasterset[i] = zZ);
给我一个“索引”[0]到[10]中包含的所有Z值的平均值,每个索引都有数百或数千个二级索引,每个索引都有[x] [y] [ z]值?
编辑:我拼凑了一个双重foreach,通过从复杂结构制作一个正常列表,然后在该列表上使用普通linq。 我仍然喜欢一气呵成。 感谢大家的建议
要获得总平均值:
var average = RasterSet.SelectMany(x => x).Average(x => xZ);
要获取索引0-10中子列表的平均值,请执行以下操作:
var average = RasterSet.GetRange(0, 10).SelectMany(x => x).Average(x => xZ);
如果我理解你需要什么:
RasterSet.SelectMenu(rs => rs.Take(11)).Average(x => xZ)
我建议使用以下代码
RasterSet.Take(10).SelectMany(x => xZ).Average();
如果要进行分页,也可以使用Skip()函数
像这样的东西……
var avg = from i in RasterSet let innerRasterSet = RasterSet[i] where i > 0 && i <= 10 select innerRasterSet.Average(z=> zZ);