文档章节

C# Sort 多层排序 lambda 递归

捍卫机密
 捍卫机密
发布于 2017/05/12 16:57
字数 284
阅读 41
收藏 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
码字总数 46331
作品 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
整理一下py的sort

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

捍卫机密
2016/12/27
4
0
Python中 字典排序、列表排序

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

duhaizhang
2012/08/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用正则表达式实现网页爬虫的思路详解

网页爬虫:就是一个程序用于在互联网中获取指定规则的数据。这篇文章主要介绍了使用正则表达式实现网页爬虫的思路详解,需要的朋友可以参考下 网页爬虫:就是一个程序用于在互联网中获取指定规...

前端小攻略
30分钟前
0
0
vue中锚点的三种方法

第一种: router.js中添加 mode: 'history', srcollBehavior(to,from,savedPosition){ if(to.hash){ return {selector:to.hash } } } 组件: <template><div><ul class="li......

peakedness丶
32分钟前
0
0
记一次面试最常见的10个Redis"刁难"问题

导读:在程序员面试过程中Redis相关的知识是常被问到的话题。作为一名在互联网技术行业打击过成百上千名的资深技术面试官,本文作者总结了面试过程中经常问到的问题。十分值得一读。 Redis在...

小刀爱编程
今天
20
0
TiDB Lab 诞生记 | TiDB Hackathon 优秀项目分享

本文由红凤凰粉凤凰粉红凤凰队的成员主笔,他们的项目 TiDB Lab 在本届 TiDB Hackathon 2018 中获得了二等奖。TiDB Lab 为 TiDB 培训体系增加了一个可以动态观测 TiDB / TiKV / PD 细节的动画...

TiDB
今天
5
0
当区块链遇到零知识证明

本文由云+社区发表 当区块链遇到零知识证明 什么是零知识证明 零知识证明的官方定义是能够在不向验证者任何有用的信息的情况下,使验证者相信某个论断是正确的。这个定义有点抽象,下面笔者举...

腾讯云加社区
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部