C#实现数据分组

 public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }


  List<TodoItem> list = new List<TodoItem>();
            list.Add(new TodoItem
            {
                Id = 1,
                Name = "张三",
                IsComplete = true
            });
            list.Add(new TodoItem
            {
                Id = 2,
                Name = "李四",
                IsComplete = false
            });
            list.Add(new TodoItem
            {
                Id = 0,
                Name = "李四",
                IsComplete = false
            });
            list.Add(new TodoItem
            {
                Id = 3,
                Name = "王五",
                IsComplete = false
            });
            list.Add(new TodoItem
            {
                Id = 4,
                Name = "李四",
                IsComplete = false
            });
            var results = new SortedDictionary<string, IList<TodoItem>>();
            foreach (var item in list)
            {
                IList<TodoItem> todos;
                if (!results.TryGetValue(item.Name, out todos))
                {
                    todos = new List<TodoItem>();
                    results[item.Name] = todos;
                }
                todos.Add(item);
            }

也可引用扩展方法:
 public static Dictionary<string, IList<T>> GroupElement<T>(this IEnumerable<T> source, Func<T, string> func)
        {
            var dic = new Dictionary<string, IList<T>>();
            foreach (T t in source)
            {
                var key = func(t);
                IList<T> list;
                if (!dic.TryGetValue(key, out list))
                {
                    list = new List<T>();
                    dic[key] = list;
                }
                if (list.Count < 1)
                {
                    list.Add(t);
                }
            }
            return dic;
        }
或者取排序最大值
 public static TElement MaxElement<TElement, TData>(this IEnumerable<TElement> source,
            Func<TElement, TData> selecter) where TData : IComparable<TData>
        {
            if (source == null)
                throw new ArgumentNullException("source");
            if (selecter == null)
                throw new ArgumentNullException("selecter");
            Boolean firstElement = true;
            TElement result = default(TElement);
            TData maxValue = default(TData);
            foreach (TElement element in source)
            {
                var candidata = selecter(element);
                if (firstElement || (candidata.CompareTo(maxValue) > 0))
                {
                    firstElement = false;
                    maxValue = candidata;
                    result = element;
                }
            }
            return result;
        }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

双叶红于二月花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值