使用 C# lamda 表达式写的两种递归函数
//将一个平行数据,整理为一个树形数据
private void Test1(List<myType> allTypeList)
{
//查找父节点
List<myType> rootType = allTypeList.Where(o => o.ParentId == -1).ToList();
//递归主函数
Action<myType> addChildType = null;
addChildType
= (typeInfo =>
{
var childInfo = allTypeList.Where(o => o.ParentId == typeInfo.id);
if (childInfo.IsNullOrDbNull())
return;
childInfo.All(
o =>
{
typeInfo.ChildTypes.Add(o);
addChildType(o);
return true;
});
});
//递归调用
allTypeList.ForEach(
o =>
{
addChildType(o);
});
}
//递归查找指定节点的完整路径
private void Test2(string id)
{
List<myType> crumbs = new List<myType>();
//递归查询指定 id 的完整路径,arg1=待查询id,arg2=子节点集合,arg3=父节点信息
Func<string, List<myType>, myType> getTypeFullPath = null;
getTypeFullPath
= (
(id, childList) =>
{
foreach (var child in childList)
{
if (childList.IsNullOrDbNull())
return null;
if (child.id.ToString().Equals(id))
{
return child;
}
if (child.ChildTypes.Count > 0)
{
var result = getTypeFullPath(id, child.ChildTypes);
if (!result.IsNullOrDbNull())
{
//result.id 和 result.Name 是 myType 类的属性字段
crumbs.Add(new myType() {Id = result.id, Name = result.Name});
return child;
}
}
}
return null;
});
//递归入口
myType typeinfo = = getTypeFullPath(threeLevelType, productTypeList);
//这里返回的是一级节点
if (!typeinfo.IsNullOrDbNull())
{
crumbs.Add(new myType() { Id = typeinfo.id.ToString(), Name = typeinfo.TypeName });
}
return crumbs;
}
转载保留:http://www.iqingcao.com
分享到:
相关推荐
C# Lamda表达式简单运用
讲述lamda表达式的使用,里边有具体相关的使用方法,值得一学
这是委托 匿名方法 lamda表达式的例子
C#将Lambda表达式转成Sql语句,根据自己看的文章手写出来的,并配有自己理解的注释,有需要的同学可以自行下载。
lamda表达式 part1
本课程主要针对于Java 8(JDK 1.8)的新特性Lamda表达式进行了全面讲解。讲解了java基于函数编程的语法,以及与Lamda表达式操作有关的内建接口、批处理、MapReduce数据分析汇总处理。
lamda表达式.rar
C#源代码-,有注释
精通C#编程,正确理解C#的语法,对从事Dot net开发的人还是比较有帮助的
lamda java
lamda java
jdk1.8的特性
lamda 优美表达式 可作为仿照的案例demo,使用非常方便。
主要介绍了基于ASP.NET 5 Lamda表达式的强类型Routing实现,需要的朋友可以参考下
其实js支持函数闭包的主要...vasufunction(numnum)returnunum}//函数表达式定义 vasuneFunction(“num””num””returnunum”)//Functio构造函数 在分析闭包之前我们先来看看,定义和调用函数容易犯的错误。 例1: s
本文是C++0x系列的第四篇,主要是内容是C++0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲,是因为这三块之间有着非常密切的关系,通过对比学习,加深对这部分内容的理解。在开始之间...
lamda出来很久了最近老师说用lamda表达式来做一个Button的按钮事件,初略的将自己的做法和感想分享给大家 先说 AS 如何支持 Lambda 表达式 1.首先确定你的AndroidStudio中使用的是大于jdk1.8的版本 2、在项目的根...
Spring_SpEl表达式使用用例 只是一个简单的demo,有需要的可以看看
1. 需要一个临时方法,这个方法只会使用一次,或者使用的很少。 2. 这个方法的方法体很短,以至于比方法声明都短,写起来实在没劲(我将其称之为“一句话方法”)。 没办法,这样的方法写起来真是吃力不讨好,比如...
使用这个包,你可以在 R 中使用 lambda 表达式: library( lambdaR ) library( dplyr ) 1 : 10 % > % Filter_( x : x %% 2 == 0 ) % > % Map_( x : x ** 2 ) % > % Reduce_( x , y : x + y ) ## [1] 220 您可以...