using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Common.Unit
{
    public static class ListHelper
    {
        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<int> list)
        {
            return SeperateToString(list, ",");
        }

        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <param name="seperate">分隔符</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<int> list, string seperate)
        {
            string str = "";
            )
                return str;
            foreach (int i in list)
            {
                str += seperate + i;
            }
            return str.Substring(seperate.Length);
        }

        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<string> list)
        {
            return SeperateToString(list, ",");
        }

        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<string> list, bool removeEmpty)
        {
            return SeperateToString(list, ",", removeEmpty);
        }

        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <param name="seperate">分隔符</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<string> list, string seperate)
        {
            return SeperateToString(list, seperate, false);
        }

        /// <summary>
        /// 将List转换成String
        /// </summary>
        /// <param name="list">List对象</param>
        /// <param name="seperate">分隔符</param>
        /// <param name="removeEmpty">移除空字符</param>
        /// <returns></returns>
        public static string SeperateToString(this IEnumerable<string> list, string seperate, bool removeEmpty)
        {
            string str = "";
            )
                return str;
            foreach (string s in list)
            {
                if (removeEmpty && string.IsNullOrEmpty(s))
                    continue;
                str += seperate + s;
            }
            )
                str = str.Substring(seperate.Length);
            return str;
        }
        /// <summary>
        /// 扩展distinct 方法 调用方式lst = lst.Distinct((x, y) => x.ID==y.ID ).ToList();
        /// </summary>
        /// <typeparam name="TSource"></typeparam>
        /// <param name="list"></param>
        /// <param name="dele"></param>
        /// <returns></returns>
        public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> list, EqualsComparer<TSource> dele)
        {
            return list.Distinct(new Compare<TSource>(dele));
        }

        /// <summary>
        /// 扩展distinct 方法 调用方式 lst = lst.Distinct(p => p.ID).ToList();
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="V"></typeparam>
        /// <param name="source"></param>
        /// <param name="keySelector"></param>
        /// <returns></returns>
        public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)
        {
            return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));
        }  

        static void test()
        {
            List<int> list = new List<int>();
            list.Add();
            list.Add();
            list.Add();
            Console.WriteLine(list.SeperateToString(","));

            List<string> list2 = new List<string>();
            list2.Add(");
            list2.Add(");
            list2.Add(");
            Console.WriteLine(list2.SeperateToString(",", false));
        }
    }

    #region 实现Distinct IEqualityComparer 接口
    public delegate bool EqualsComparer<T>(T x, T y);
    public class Compare<T> : IEqualityComparer<T>
    {
        private EqualsComparer<T> _equalsComparer;

        public Compare(EqualsComparer<T> equalsComparer)
        {
            this._equalsComparer = equalsComparer;
        }

        public bool Equals(T x, T y)
        {
            if (null != this._equalsComparer)
                return this._equalsComparer(x, y);
            else
                return false;
        }
        public int GetHashCode(T obj)
        {
            return obj.ToString().GetHashCode();
        }
    }

    public class CommonEqualityComparer<T, V> : IEqualityComparer<T>
    {
        private Func<T, V> keySelector;

        public CommonEqualityComparer(Func<T, V> keySelector)
        {
            this.keySelector = keySelector;
        }

        public bool Equals(T x, T y)
        {
            return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));
        }

        public int GetHashCode(T obj)
        {
            return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));
        }
    }
#endregion
}

C# List 扩展排序的更多相关文章

  1. hive 排序和聚集

    1.order by 是对数据进行全排序,属于标准排序语句 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)只有一个reducer,会导致当输入规 ...

  2. java 字符串排序

    http://bbs.csdn.net/topics/280032929 大可不需要那样复杂了!(一)如果要排序的为字符串,如:String sortStr = "ACDFE";  ...

  3. javascript table排序之jquery.tablesorter.js

    table排序 jquery.tablesorter.js 一.Demo下载地址: 1.tablesorter.js下载地址: http://download.csdn.net/detail/zhan ...

  4. Guava中强大的排序器Ordering使用

    一 创建排序器 排序器:可以用来为构建复杂的比较器,以完成集合排序的功能: 本质上来说,Ordering 实例无非就是一个特殊的Comparator 实例. Ordering把很多基于Comparat ...

  5. ORA 各种oraclesql错误

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  6. oracle 错误代码大全

    oracle错误代码大全(超详细)   ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最 ...

  7. SQL错误码

    ///////////////////////////////////////////////////////////////ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会 ...

  8. oracle错误码

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

  9. Oracle 错误代码

    ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019: 超出最大会话许可数 ORA-00020: 超出 ...

随机推荐

  1. 如何修改tomcat后台console标题(转)

    一个机器启动多个tomcat之后,分不清楚项目之间的区别,通过console口设置一下标题 tomcat控制台改名,修改方法:   1.找到tomcat\bin\catalina.bat   2.找到 ...

  2. python修炼7----迭代器

    迭代器 -------------------------------------------------------------------------------- 充电小知识 1.yield-- ...

  3. Output\TEST.sct(7): error: L6236E: No section matches selector - no section to be FIRST/LAST.

    点击错误信息,跳转到了一个.sct文件:*.o (RESET, +First) 按照如下操作,也不能解决问题.对比别的工程,也没找出问题. "操作是: Options for Target ...

  4. sqlserver和Windows资源管理器争用内存

    sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是

  5. 架设自己的FTP服务器 Serv-U详细配置图文教程

    转自:http://www.jb51.net/article/31635.htm 所有不是很要求安全的情况下是可以用serv_U的,当然我们也可以通过一些设置,保证serv_u安全运行.这里就分享下s ...

  6. 第三天 函数 三元运算 lambda表达式 内置函数 文件操作

    面向过程: 直接一行一行写代码,遇到重复的内容复制黏贴. 不利于代码阅读 代码没有复用 面向对象 将代码块定义为函数,以后直接调用函数 增强了复用性 函数的定义方法 def 函数名(传递参数): 函数 ...

  7. JS跨域访问问题

    js跨域了. 只能给几个资料参考了:http://blog.csdn.net/lovingprince/article/details/2954675 http://www.kuqin.com/web ...

  8. ZOJ 1003 Crashing Balloon

    #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...

  9. 2、变量var关键字

    我们在看js声明变量的时候,经常会发现有的变量前会带var 但又的则没有,那么这究竟有什么区别呢? 如果这种情况发生在函数里的话, 加var定义的变量是局部变量,不加var定义的就成了全局变量. // ...

  10. jQuery获取元素的兄弟节点的几种方法

    $('#id').siblings() //当前元素所有的兄弟节点 $('#id').prev() //当前元素前一个兄弟节点 $('#id').prevaAll() //当前元素之前所有的兄弟节点 ...