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;
}