一个list中有多个item,每个item都要进行调用自身,问题大概是这样的,函数传入一个datatable 找到符合条件的,剩余不符合的需要再进入这个函数,直到结束,但是此时不符合条件的可能是多种组合,这时候怎么做,可以用循环中套递归吗,怎么实现?
17条回答 默认 最新
关注 获得0.45元问题酬金 引自强大而免费的微信小程序:皆我百晓生。
你可以使用递归来解决这个问题。首先,在函数中接收一个DataTable参数,然后遍历DataTable中的每一行,判断是否符合条件。如果符合条件,将其添加到一个结果集合中。
接下来,创建一个辅助函数,该函数接收一个列表和当前处理的行索引,然后递归调用自身,以处理列表中的下一个项。在每次递归调用中,通过修改条件来过滤掉不符合条件的项,并将满足条件的项添加到结果集合中。最后,返回结果集合。
以下是一个示例代码:
public void ProcessDataTable(DataTable dataTable) { List<DataRow> result = new List<DataRow>(); // 遍历DataTable中的每一行 foreach (DataRow row in dataTable.Rows) { // 判断是否符合条件 if (IsMatch(row)) { result.Add(row); } } // 处理不符合条件的项 List<DataRow> remainingRows = new List<DataRow>(dataTable.Rows.Cast<DataRow>().Except(result)); ProcessRemainingRows(remainingRows); } public void ProcessRemainingRows(List<DataRow> remainingRows) { // 递归终止条件:没有剩余项 if (remainingRows.Count == 0) { return; } List<DataRow> result = new List<DataRow>(); // 遍历剩余项 for (int i = 0; i < remainingRows.Count; i++) { DataRow row = remainingRows[i]; // 进行处理,并判断是否符合条件 if (IsMatch(row)) { result.Add(row); } } // 移除已处理的项 remainingRows.RemoveAll(result.Contains); // 递归调用处理剩余项 ProcessRemainingRows(remainingRows); } public bool IsMatch(DataRow row) { // 判断行是否符合条件的逻辑 // 返回 true 或 false return true; }
在以上示例中,
ProcessDataTable
函数首先遍历DataTable中的每一行,判断是否符合条件,并将满足条件的行存入结果集合。然后,将剩余的行传递给ProcessRemainingRows
函数进行处理。ProcessRemainingRows
函数也是遍历剩余行,进行处理,并递归调用自身,直到剩余行为空为止。你可以根据需要修改条件判断的逻辑。
解决 1无用
悬赏问题
- ¥15 关于#java#的问题,请各位专家解答!
- ¥15 急matlab编程仿真二阶震荡系统
- ¥20 TEC-9的数据通路实验
- ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
- ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
- ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
- ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
- ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
- ¥30 求解达问题(有红包)
- ¥15 请解包一个pak文件