我从软件制造商处获得了一个访问文件的c#程序,并给出了一份数据结构列表
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.URL?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.SplitPane?>
<?import javafx.scene.control.Tab?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane id="AnchorPane" prefHeight="882.0" prefWidth="1294.0" styleClass="mainFxmlClass" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="admintool.ui.stammdaten.personen.Personen_detailController">
<stylesheets>
<URL value="@personen.css" />
</stylesheets>
<children>
<TabPane fx:id="tabPane" prefHeight="882.0" prefWidth="1294.0" tabClosingPolicy="UNAVAILABLE" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<tabs>
<Tab closable="false" text="Details">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<SplitPane dividerPositions="0.2291421856639248" layoutX="151.0" layoutY="82.0" orientation="VERTICAL" prefHeight="853.0" prefWidth="1294.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
<children>
<Label layoutX="14.0" layoutY="14.0" text="Name:" />
<Label layoutX="566.0" layoutY="49.0" text="Sperre:" />
<Label layoutX="547.0" layoutY="14.0" text="Person_ID:" />
<TextField fx:id="name_TextFeld_detail" layoutX="66.0" layoutY="10.0" prefHeight="25.0" prefWidth="186.0" />
<Label layoutX="20.0" layoutY="49.0" text="Land:" />
<TextField fx:id="land_TextFeld_detail" layoutX="66.0" layoutY="45.0" prefHeight="25.0" prefWidth="186.0" />
<TextField fx:id="personId_TextFeld_detail" layoutX="620.0" layoutY="10.0" />
<Label layoutX="500.0" layoutY="88.0" text="Windows Kennung:" />
<TextField fx:id="sperre_TextFeld_detail" layoutX="620.0" layoutY="45.0" />
<TextField fx:id="windowsKennung_TextFeld_detail" layoutX="620.0" layoutY="84.0" />
</children>
</AnchorPane>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
<children>
<TableView fx:id="personTable" prefHeight="709.0" prefWidth="1294.0" />
</children>
</AnchorPane>
</items>
</SplitPane>
</children>
</AnchorPane>
</content>
</Tab>
</tabs>
</TabPane>
</children>
</AnchorPane>
这给了我一个“索引”列表,如
List<List<dataPt_struct>> RasterSet = new List<List<dataPt_struct>>();
等等。在那些我有另一个“索引”列表,其中包含实际的数据结构
RasterSet Count = 100
[0]Count = 400
[1]Count = 411
所以现在我需要访问列表列表中数据结构的X,Y,Z部分。例如,是否可以使用LINQ来说
[0]
[X]
[Y]
[Z]
...
[399]
[X]
[Y]
[Z]
给我一个“索引”[0]到[10]中包含的所有Z值的平均值,每个索引都有数百或数千个二级索引,每个索引都有[x] [ y] [z]值?
编辑:我拼凑了一个双重foreach,通过从复杂结构制作一个普通列表,然后在该列表上使用普通linq。我仍然喜欢一气呵成。感谢大家的建议
答案 0 :(得分:4)
获得总平均值:
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);
答案 1 :(得分:1)
如果我理解你需要什么:
RasterSet.SelectMenu(rs => rs.Take(11)).Average(x => x.Z)
答案 2 :(得分:1)
我建议使用以下代码
RasterSet.Take(10).SelectMany(x => x.Z).Average();
如果要进行分页
,也可以使用Skip()函数答案 3 :(得分:0)
像这样的东西... ...
var avg = from i in RasterSet
let innerRasterSet = RasterSet[i]
where i > 0 && i <= 10
select innerRasterSet.Average(z=> z.Z);