文档章节

C# Sort 多层排序 lambda 递归

捍卫机密
 捍卫机密
发布于 2017/05/12 16:57
字数 284
阅读 19
收藏 0
C#

 

 





/// <summary>
/// list静态方法入口
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="self"></param>
/// <param name="l"></param>
/// <returns></returns>
public static IList<T> SortX<T>(this IList<T> self, Func<T, T, int>[] l)
{
var ls = self.ToList();
ls.Sort((x, y) => { return SortMulti(x, y, l, 0); });
return ls;
}

/// <summary>
/// 递归多层排序方法,类似sort((x,y)=>{ return X;})的数组版本;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="x"></param>
/// <param name="y"></param>
/// <param name="l"></param>
/// <param name="i"></param>
/// <returns></returns>
public static int SortMulti<T>(T x, T y, Func<T, T, int>[] l, int i)
{
var maxLen = l.Length - 1;
if (i > maxLen)
{
    return 0;
}
else
{
    var xr = l[i](x, y);
    return xr != 0 ? xr : SortMulti(x, y, l, i + 1);
}
}


// 这是个 运行样例 参数构成 关键在 排序具体计算的定义
// new Func<Tuple<int, int>, Tuple<int, int>, int>[] { 
//     (x, y) => { return x.Item1.CompareTo(y.Item1); }, 
//     (x, y) => { return x.Item2.CompareTo(y.Item2); }
// }
// 运行样例整体
xl.SortX<Tuple<int, int>>(new Func<Tuple<int, int>, Tuple<int, int>, int>[] { (x, y) => { return x.Item1.CompareTo(y.Item1); }, (x, y) => { return x.Item2.CompareTo(y.Item2); } });


// 这里跟一个 别人写的 递归lambda 斐波那契递归,以上方法参考这个写法。但是实际上没有用这种方法还是用的函数
public static Func<int, int> Fibonacci = n => n > 1 ? Fibonacci(n - 1) + Fibonacci(n - 2) : n;

 

© 著作权归作者所有

共有 人打赏支持
捍卫机密
粉丝 5
博文 126
码字总数 45015
作品 0
成都
程序员
Java8 Lambda表达式之比较器

在这个例子中,我将向你展示如何使用Java8的lambda表达式写的比较器排序列表。 经典例子 Lambda表达式方式 1. 使用Lambda排序 这个例子使用年龄比较对象,通常你使用并且通过一个匿名函数实现...

王爵nice
2015/09/15
853
0
python dict按照value 排序

我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可...

飞翔的单车
2014/09/03
0
0
Python中 字典排序、列表排序

一、字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排...

oanyt
2015/07/22
0
0
Python中 字典排序、列表排序

一、字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排...

duhaizhang
2012/08/06
0
0
整理一下py的sort

对List进行排序,Python提供两个方法 对给定的List L进行排序, 方法1.用List的成员函数sort进行排序 方法2.用built-in函数sorted进行排序(从2.4开始) 这两种方法使用起来差不多,以第一种...

捍卫机密
2016/12/27
4
0

没有更多内容

加载失败,请刷新页面

加载更多

[Python进阶] Python命令行参数

Python 获得命令行参数的方法 需要模块:sys 参数个数:len(sys.argv) 脚本名: sys.argv[0] 参数1: sys.argv[1] 参数2: sys.argv[2] 解析命令行参数 Python提供了一个getopt模块,可用于解...

Eappo_Geng
10分钟前
0
0
add docker api url to jenkins

add docker api url to jenkins add jenkins to dockergroup gpasswd -a $USER docker gpasswd -a jenkins docker https://stackoverflow.com/questions/37178824/how-do-i-find-the-docker-......

kewei_zhang
14分钟前
0
0
Scala入门篇

1、定义变量 var 可变 val 不可变,相当于Java中的final Unit相当于Java中的void,以()表示 scala> val a = println("ddd") ddd a: Unit = () 2,声明数组 scala> val arr = Array(1,2,3,4,5) ......

算法之名
14分钟前
6
0
利用redis统计分布式集群中接口缓存命中情况

接口使用了缓存,想看看缓存命中率,到底提升了多少了?固想到做个统计方法,单机情况下使用 AtomicImteger,考虑到分布式集群中多台服务器调用,所以考虑使用redis进行统计 原来的想法很简单用分布...

计算机的小二青年
14分钟前
0
0
前端加密JS库--CryptoJS 使用指南

有时候项目涉及到的敏感数据比较多,为了信息安全,我们常常需要对一些数据进行接口加密处理,如编码、将明文转化为暗文、加密比对、AES + BASE64 算法加密等。 Base64 编码 为什么要编...

舒龙虎
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部