C# 数据结构列表-如何使用linq访问?
一家软件制造商给了我一个c#程序,它可以访问一个文件,并给我一个数据结构列表C# 数据结构列表-如何使用linq访问?,c#,linq,C#,Linq,一家软件制造商给了我一个c#程序,它可以访问一个文件,并给我一个数据结构列表 List<List<dataPt_struct>> RasterSet = new List<List<dataPt_struct>>(); 等等。在这些索引中,我有另一个包含实际数据结构的“索引”列表 [0] [X] [Y] [Z] ... [399] [X] [Y] [Z] 现在我需要访问列表列表中数据结构的X,Y,Z部分
List<List<dataPt_struct>> RasterSet = new List<List<dataPt_struct>>();
等等。在这些索引中,我有另一个包含实际数据结构的“索引”列表
[0]
[X]
[Y]
[Z]
...
[399]
[X]
[Y]
[Z]
现在我需要访问列表列表中数据结构的X,Y,Z部分。例如,是否可以使用LINQ来表示
if (RasterSet[i] >= 0 && Rasterset[i] =< 10)
RasterSet[i].Average(z=> z.Z);
if(光栅集[i]>=0&&光栅集[i]=<10)
光栅集[i]。平均值(z=>z.z);
给我一个“索引”[0]到[10]中包含的所有Z值的平均值,每个索引都有数百或数千个二级索引,每个二级索引都有[x][y][Z]值
编辑:我拼凑了一个双foreach,它的工作原理是从复杂结构中生成一个普通列表,然后在该列表上使用普通linq。我还是很想一次完成这一切。谢谢大家的建议像这样的东西我可以
var avg = from i in RasterSet
let innerRasterSet = RasterSet[i]
where i > 0 && i <= 10
select innerRasterSet.Average(z=> z.Z);
var avg=来自光栅集中的i
设innerRasterSet=RasterSet[i]
其中i>0&&i z.z);
要获得总平均值:
var average = RasterSet.SelectMany(x => x).Average(x => x.Z);
要从索引0-10中获取子列表的平均值,请执行以下操作:
var average = RasterSet.GetRange(0, 10).SelectMany(x => x).Average(x => x.Z);
如果我正确理解了您的需求:
RasterSet.SelectMenu(rs => rs.Take(11)).Average(x => x.Z)
我建议使用以下代码
RasterSet.Take(10).SelectMany(x => x.Z).Average();
如果要进行分页,也可以使用Skip()函数如果我没有错,则可以使用SelectMany函数,然后对其应用average函数。不幸的是,我遇到了一个错误(不包含Z的定义,也没有扩展方法……)。我认为这是因为datastruct仍然是一个列表。我犯了一个错误,现在应该没事了:-)干杯,伙计,这很好,而且是一个简单易懂的更改。我喜欢这种语法,但我得到了一个“无法从泛型.list转换为int”错误,这是你的错误,我的错。
RasterSet.Take(10).SelectMany(x => x.Z).Average();