gpt4 book ai didi

C#如何从列表中删除特定节点

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

我有以下类(class)

public class Item
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Content { get; set; }
public bool IsLastItem { get; set; }
}

假设我有以下模型,我想删除 IsLastItem = false 的项目并且没有 child 。在这种情况下 item4 和 item7 应该从列表中删除。

Model

我从数据库中获取了我的模型列表,并像这样在代码块中对其进行了模拟
var items = new List<Item>
{
new Item
{
Id = 1,
ParentId = 0,
Content = "item1",
IsLastItem = false
},
new Item
{
Id = 2,
ParentId = 1,
Content = "item2",
IsLastItem = false
},
new Item
{
Id = 3,
ParentId = 1,
Content = "item3",
IsLastItem = true
},
new Item
{
Id = 4,
ParentId = 1,
Content = "item4",
IsLastItem = false
},
new Item
{
Id = 5,
ParentId = 2,
Content = "item5",
IsLastItem = false
},
new Item
{
Id = 6,
ParentId = 5,
Content = "item6",
IsLastItem = false
},
new Item
{
Id = 7,
ParentId = 5,
Content = "item7",
IsLastItem = false
},
new Item
{
Id = 8,
ParentId = 6,
Content = "item8",
IsLastItem = true
},
new Item
{
Id = 9,
ParentId = 8,
Content = "item9",
IsLastItem = true
}
};

最佳答案

像这样的平面列表对于这些类型的操作来说并不是最佳的——如果你能以某种树结构取回列表可能会很好(如果你在 2016 年,可以使用 FOR XML 或 JSON 从 SQL 中返回它)首先,您可以更轻松地遍历树。

另请注意,您的示例数据未设置 IsLastItem ...

照原样,您必须至少迭代两次,如下所示:

items.RemoveAll(x => x.IsLastItem == false && 
items.Any(y => y.ParentId == x.Id) == false);

您是说要删除 IsLastItem 中的所有项目是 false 并且没有至少一个项目的父 id 是该项目的 id。

关于C#如何从列表中删除特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145819/

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