循环直到在List中找不到特定的data
本文关键字:data 找不到 List 循环 | 更新日期: 2023-09-27 18:19:02
我有一个list int类,它由child和parentID组成,用于标识。
public class id
{
public int childID {get;set;}
public int parentID {get;set;}
public string text{get;set;}
}
和我想要一个循环,基于currentID (currentChildID)有一个parentID。
例句:
在我的列表(假设这是数据):
childID --- parentID --- text
1 0 aaa
2 1 bbb
3 2 ccc
4 2 ddd
,假设我的currentID是1,所以我想要的是得到所有的childdid的parentID值为1
在上面的例子中是2 .
然后在get text = 2(即bbb)中创建一个条件。
然后在循环之后验证列表中是否存在parentID为2的数据
所以在上面的例子中是3和4…
则如果没有parentID值包含数字,例如:3和4,循环将结束。
所以这是一个连续循环,直到childdid值在列表中没有parentID值…
编辑:到目前为止我还没有尝试过任何与循环相关的,除了完成列表上所需的数据,但我猜它类似:
int theCurrentID = 0;
bool initial = idList.Any(n => n.currentID == childID);
if (initial)
{
//loop and gettext
foreach(var x in idList.Where(n => n.currentID == childID))
{
theCurrentID = x.childID; //supposedly currentID
}
bool next = idList.Any(n => theCurrentID == parentID);
//loop and gettext
if (next)
{
foreach(var x in idList.Where(n => theCurrentID == parentID)
{
}
}
else
{
//parent not found
}
注意:此示例在第二次循环时停止,并且不验证是否还有parentID .
好的,一种方法是递归函数
private void Traverse(int childID, List<id> data)
{
//Pre-action:: Top to bottom approach, to work on items from top level
//data.Where(x => x.childID == childID);
foreach (var child in data.Where(x => x.parentID == childID))
{
Traverse(child.childID, data);
}
//Post-action:: Bottom to top approach, to work on items from root level
//data.Where(x => x.childID == childID);
}
使用这个函数作为:
int theCurrentID = 1;
List<id> temp = new List<id>();
temp.Add(new id() { childID = 1, parentID = 0, text = "1" });
temp.Add(new id() { childID = 2, parentID = 1, text = "2" });
temp.Add(new id() { childID = 3, parentID = 2, text = "3" });
temp.Add(new id() { childID = 4, parentID = 3, text = "4" });
Traverse(theCurrentID, temp);
好的,我会尽力帮助你,但我仍然不是100%确定你的期望:)
首先将childID
重命名为ID
和类名,因为这很容易混淆。
public class MyClass
{
public int ID {get;set;}
public int parentID {get;set;}
public string text{get;set;}
}
//loop through all items
foreach(var currentItem in idList.OrderBy(x=>x.ID))
{
//get a list of parent items
List<id> parents = idList.Where(x=>x.parentID == currentItem.ID);
if(parents.Count == 0)
{
//we dont have any records which parentID is current item ID so stop executing loop further
break;
}
//Here you loop through all parents and do what you want
foreach(var parentItem in parents)
{
//Do what you want with parentItem
}
}
注。未测试代码