gpt4 book ai didi

c# - 根据元素变量和元素位置拆分列表

转载 作者:行者123 更新时间:2023-11-30 15:23:32 25 4
gpt4 key购买 nike

嘿,我正在尝试根据元素的 bool 值是否为真来拆分列表。但每次它通过一些真实的并遇到一个错误时,我也希望它也开始一个包含所有错误的新列表,直到它再次遇到真实等等。所以基本上将错误和正确的序列分组

public void SortWalls()
{
List<Node> innerWallNodes;
foreach(Wall w in walls)
{
WallAxis ax = w.axis;
innerWallNodes = new List<Node>();
for(int i=w.wallNodes.Count-1; i>=0; i--)
{
if(w.wallNodes[i].markedForDoor)
{
//split wall!!
innerWallNodes.Add(w.wallNodes[i]);
w.wallNodes.RemoveAt(i);
}
}
if(innerWallNodes.Count > 0)
{
Wall wall = new Wall(innerWallNodes, ax);
innerWalls.Add(wall);
}
}
}

我是这样做的,然后根据列表的第一个和最后一个元素构建一个网格。但是由于在许多情况下 innerWallNodes 可能位于列表中间的某个位置而被“切掉”,因此我剩余的“外墙”在我的网格中仍然具有相同的节点索引,用于列表中的第一个和最后一个,还在 overdraw 我的“内墙”

假设每个节点 !markedForDoor 为 0,每个节点 markedForDoor 为 1,它们在我的列表中排序如下。像这样:

|000|11111|00000|11|000|我如何获得 |...| 之间的每个列表?

我如何以简单的方式做到这一点。我以为 Linq 会为此提供一些东西,但找不到任何东西。

最佳答案

Linq 无济于事。这是代码:

List<List<YouObjectType>> SplitList(List<YourObjectType> listToSplit) {
List<List<YouObjectType>> listOfLists = new List<List<YourObjectType>>();
List<YourObjectType> tmp = new List<YourObjectType>();
foreach(YourObjectType item in listToSplit) {
if (tmp.Count > 0
&& tmp[tmp.Count - 1] != item) {
// Compare you items here as you wish,
// I'm not sure what kind of objects
// and what kind of comparison you are going to use
listOfLists.Add(tmp);
tmp = new List<YourObjectType>();
}
tmp.Add(item);
}
if (tmp.Count > 0) {
listOfLists.Add(tmp);
}
return listOfLists;
}

关于c# - 根据元素变量和元素位置拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375197/

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