循环直到在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 .

循环直到在List中找不到特定的data

好的,一种方法是递归函数

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
  }
}

注。未测试代码