c# - 根据元素属性从列表中获取唯一元素
问题描述
如何根据 Property 从列表中获取唯一元素string Name
?我试过这个,但它不起作用。Resulting List 已排序和分组,但不会删除重复的元素:
List<ElementType> uniqueTypes = types.OrderBy(g => g.Name)
.GroupBy(g => g.Name).Select(s => s.First()).ToList();
任何帮助,非常感谢。
解决方案
使用扩展方法的标准定义之一DistinctBy
。这是我使用的一对:
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> src, Func<T, TKey> keySelector, IEqualityComparer<TKey> comparer = null) {
var seenKeys = new HashSet<TKey>(comparer);
foreach (var e in src)
if (seenKeys.Add(keySelector(e)))
yield return e;
}
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> src, Func<T, TKey> keySelector, Func<IGrouping<TKey, T>, T> pickOne, IEqualityComparer<TKey> comparer = null) =>
src.GroupBy(keySelector).Select(g => pickOne(g));
推荐阅读
- java - 考虑到性能,我应该如何获得用于将 POJO 序列化为 JSON 的 ObjectWriter?
- c# - UWP:突出显示 ListBoxItem - 与突出显示一致的事件
- ajax - 用于 ajax 表单提交的 Google Analytics 目标未达到目标
- zsh - 如何将参数传递给自定义 zsh 函数?
- php - 当我更新我的数据库时,它不会更新并且数据变为 1 .. 字面意思是 1
- reactjs - 将 jquery ajax 调用转为 React axios 调用
- amazon-web-services - 具有 GeoLocation Routing 的 AWS Route 53 是否足以满足基本 CDN 行为
- angular - 使用 Bootstrap 4 将下拉菜单添加到 Angular 6 中的可点击表格行
- delphi - 以管理员身份运行会阻止 DropTarget 的 onDropped
- racket - 如何修复我的吹嘘/球拍解析器中的未绑定标识符错误?