c# - c# linq List 属性和分组依据
问题描述
鉴于此示例代码:
var item1 = ("Test1", new List<string>() { "1", "2", "3" });
var item2 = ("Test2", new List<string>() { "1", "2", "3" });
var item3 = ("Test3", new List<string>() { "1", "2", "3" });
var _list = new List<(string ID, List<string> Items)>
{
item1,
item2,
item3
};
var groupby = _list.GroupBy(x => x.Items);
当您GroupBy
在这里调用时,为什么结果不是单个组,因为“项目”列表都相同?
解决方案
因为列表包含相同顺序的相同元素并不意味着它们是相同的。两个列表相同的默认定义是它们是否具有相同的引用,这意味着它们是否指向内存中的相同对象。
您有三个不同的引用指向三个不同的对象。
如果您想覆盖此行为并重新定义“相同”的含义,您可以实现一个IEqualityComparer
forList<string>
来检查两个列表是否包含相同顺序的相同元素。并将该比较器提供给GroupBy
.
推荐阅读
- java - Apache Beam 通配符递归搜索文件
- kubernetes - Cloud Run for GKE 发生了什么?
- java - 在java中获取没有时间的日期
- javascript - Javascript jQuery 错误重载 Ajax 请求?
- javascript - (Amcharts.js) 创建饼图饼图
- c# - 字符串没有正确连接
- excel - 如何从插件内部引用 xlsm 文件的名称?
- react-native - 如何修复 react-native-events-calendar 错误
- sybase - 在命令提示符下从 SQL 文件打印语句
- r - 如何使搜索引擎在 bookdown gitbook 中为多字节字符(尤其是日语)工作?