【发布时间】:2021-02-15 14:29:01
【问题描述】:
例如,我有一个 Excel 单元格列表
List<Cell> cells = new List<Cell>
{
new Cell("4"),
new Cell("Hez"),
new Cell("Method"),
new Cell("4"),
new Cell("Val"),
new Cell("Method"),
}
我需要获取唯一唯一的单元格(在本例中为 Cell("Val")、Cell("Hez")),因此 Distinct() 不适合我。
我找到了这个解决方案,但它根本不返回任何数据
var uniqueTest = allData.GroupBy(cell => cell)
.Where(group => group.ToString().Count() == 1)
.Select(group => group.Key);
我认为问题在于 Cell 对象不包含任何比较方法(这是 IronXl lib),所以这就是我在这里使用 ToString() 的原因。
但我还不太了解 linq,因此感谢任何解释或建议
备注:
我需要返回一个单元格列表,但具有唯一值
【问题讨论】:
-
group.Count() == 1是的,您需要实现Equals和GetHashCode。另一种选择是使用带有自定义比较器的HashSet,循环列表并检查哈希集 -
为什么
Hez不是唯一的单元格? -
@Pavel Anikhouski 修复了它,但这不是重点
-
@Damien_The_Unbeliever 是 :) 我的错误
-
如果
Cell只有值,为什么不使用GroupBy(cell => cell.Value)呢?GroupBy也可以接受自定义的IEqualityComparer