gpt4 book ai didi

c# - 选择和跳过元素

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:29 25 4
gpt4 key购买 nike

我正在尝试改进一些代码,但我想不出更好的方法来完成它目前所做的事情。本质上,我在外部循环以获取项目数量除以我想要选择的数量,然后在该循​​环内我根据项目数量的内部循环选择项目,我需要创建单个项目并通过外循环值对其进行修改,因此在下面的示例中,外循环循环两次 (0,1),内循环每个外循环循环两次(0,1 然后 2,3)。

谁能看到一种更易读的方法来执行此操作或无需执行两个循环即可执行此操作的方法?

希望这是有道理的。谢谢。

考虑

的 XML
string xml = @"
<MainItem>
<Select>2</Select>
<ItemArray>
<Item>One</Item>
<Item>Two</Item>
<Item>Three</Item>
<Item>Four</Item>
</ItemArray>
</MainItem>";

var doc = XDocument.Parse(xml);

这里的 Select 值告诉我有多少项目创建一个“对象”,所以在这种情况下,2 个项目是一个对象(这可以是任何数字,但项目的数量将始终允许正确数量的对象)目前我是做一些像

    List<List<XElement>> items = new List<List<XElement>>();
for(int i = 0;i < (doc.Descendants("Item").Count() / (int)doc.Element("MainItem").Element("Select"));i++)
{
//this is one object
var singleItem = new List<XElement>();
for (int j = 0; j < (int)doc.Element("MainItem").Element("Select"); j++)
{
var item = doc.Descendants("Item").ElementAt(j + (i * (int)doc.Element("MainItem").Element("Select")));
singleItem.Add(item);
}
items.Add(singleItem);
}

所以我们以包含 2 个项目的 List 列表结束,每个项目包含 2 个 XElements(1 和 2 在一起,3 和 4 在一起)所以..

ItemOne
One
Two
ItemTwo
Three
Four

最佳答案

有一种使用单个 LINQ 语句执行此操作的简单方法。您可以按 item index / batchSize 分组,如下:

int batchSize = (int)doc.Element("MainItem").Element("Select");
var items = doc
.Descendants("Item")
.Select( (e, i) => new {i,e} )
.GroupBy( g => g.i / batchSize )
.Select( g => g.Select( gv => gv.e) )
;

这给出了一个 IEnumerable<IEnumerable<XElement>> ,在您描述的结构中。

关于c# - 选择和跳过元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3284009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com