c# - 如何将列表的 2 项分组到另一个列表中
问题描述
至于这个例子:
这演示了如何根据 1 个项目获取不同的列表。
您如何获得两件事的不同清单。说作者和标题。
public class Note
{
public string Title;
public string Author;
public string Text;
}
List<Note> Notes = new List<Note>();
一个人的答案是:
Notes.Select(x => x.Author).Distinct();
解决方案
正如 jdweng 在评论中建议的那样,您可以这样做:
Notes.Select(x => new string[] {x.Title, x.Author}).Distinct();
这将返回一个IEnumerable<string[]>
.
另一种选择是创建一个类以选择:
public class NoteSummary()
{
public string Title { get; set; }
public string Author { get; set; }
public NoteSummary(string title, string author)
{
Title = title;
Author = author;
}
}
然后linq变成:
Notes.Select(x => new NoteSummary(x.Title, x.Author)).Distinct();
返回IEnumerable<NoteSummary>
。
如果要返回原始Note
类/实体的分组集合,可以使用GroupBy
:
Notes
.GroupBy(g => new { g.Title, g.Author }) // group by fields
.Select(g => g.First()); // select first group
返回IEnumerable<Note>
。
推荐阅读
- javascript - 使用 npm live-server 时是否会清除 localStorage?
- nginx - 如何将 NGINX 中的特定 URL/Regex 映射到代理地址
- html - 中心的响应式 div。每边的 Px div
- wpf - 自定义 MenuItem 控件模板
- elasticsearch - 有没有办法在 Elasticsearch 中查询所有 _mappings 以获得一个公共元素?
- javascript - JavaScript 变量中的 JQuery html 代码不起作用
- r - R 数组 as.Date 转换
- delphi - 如何将 TreeViewItem 带入可见(滚动)区域
- java - 将键值对转换为 JSON 响应的对象?
- android - 如何处理显然相互覆盖的 gradle 依赖项