【问题标题】:Check two IEnumerable if their Count is equal [duplicate]检查两个 IEnumerable 如果它们的 Count 相等[重复]
【发布时间】:2015-02-17 09:41:16
【问题描述】:

如何在不单独运行的情况下检查两个 IEnumerables 是否具有相同的计数。表示我不想这样做 Count() == Count()。

我想找到一种方法来一次性完成。有什么想法吗?

【问题讨论】:

  • 我认为使用 IList 或 ICollection。
  • 你不能。可枚举甚至可能没有有限的计数。
  • 除非您将它们转换为具有 Count 属性的类型,该类型允许您在不迭代所有项目的情况下获取计数,否则您无法做到这一点。
  • IEnumerable 可能在任何给定时间都没有固定的计数,具体取决于它的使用方式。

标签: c# ienumerable


【解决方案1】:

这是不可能的。无论您选择哪种方法,您都必须遍历这两个序列。

最直接的方法是使用Count() 方法,如果两个序列都是List,则O(1)。在这种情况下,Count() 无法获取名为Count 的列表属性的值。

【讨论】:

  • 使用Count() 所花费的时间与更长的收集时间成正比;更好的是检查一个或两个集合是否实现ICollectionICollection<T>。如果两者都这样做,请比较它们的计数。如果有,请阅读其计数并尝试枚举另一个的 N+1 项。如果第二次收集在 N 之后结束,则它们匹配;如果它结束得更快或没有在 N 之后结束,它们不会。如果两者都没有实现计数接口,则同时迭代它们,并在一个到达末尾时立即停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2018-09-22
相关资源
最近更新 更多