.net C#是否有一个ICollection,其相等操作定义为相同的时间(不一定是相同的顺序)?

643ylb08  于 2023-04-13  发布在  .NET
关注(0)|答案(1)|浏览(100)

我正在寻找是否有一个开箱即用的ICollection<T>具有以下特征:

  • 实现.Equals(object other),并定义为相同T s的相同计数
  • GetHashCode()实现
  • [Bonus]:不可变,并进行滚动哈希,以便我可以添加/减去T s

为了清楚起见,示例:

|     A        |        B        |         A.Equals(B)      |
=============================================================
|   [1,1,2]    |    [1,2,1]      |           true           |
-------------------------------------------------------------
|   [1,1,2]    |    [1,1,3]      |           false          |
-------------------------------------------------------------
|  [1,5,2,5]   |   [1,5,2,5]     |           true           |
-------------------------------------------------------------
|  [1,5,2,5]   |   [5,5,1,2]     |           true           |
-------------------------------------------------------------
|  ['a','t']   |     ['t']       |           false          |
-------------------------------------------------------------
|  ['a','t']   |   ['t','a']     |           true           |
-------------------------------------------------------------

主要的用例是用于像https://leetcode.com/problems/coin-change-ii/这样的问题中的记忆
Python有一个开箱即用的方法,每个硬币的计数可以作为数组传入并自动记忆。在C#中做这些问题时,我总是不得不重新发明轮子。也许是因为我不知道一些有用的C#数据结构来实现这一点。

s4n0splo

s4n0splo1#

没有内置的方法来检查两个列表是否 * 等价 *,而不是 * 顺序相等 *。但是,您可以检查给定列表的所有元素是否包含在另一个列表中,反之亦然:

var equivalent = list1.All(list2.Contains) && list2.All(list1.Contains);

相关问题