c# - 如何在少于线性的时间内获得 ImmutableQueue 的大小
问题描述
我有一个像这样声明的不可变队列:
public ImmutableQueue<JObject> MyImmutableQueue =>
ImmutableQueue.CreateRange<JObject>(myConcurrentQueue);
我想从我的测试类中引用它,如下所示:
myClass.MyImmutableQueue.Count
但是,我看到该Count
方法不存在。
我在这里检查了 API ,似乎没有Count
,Size
或之类的方法Length
。
如果没有这样的方法,可能我会做一个迭代和计算元素的扩展方法,但那是低效的。
那么,是否有某种方法或某种(小于线性时间复杂度)方法来计算 ImmutableQueue 的元素?
解决方案
没有办法做到这一点,因为ImmutableQueue
以需要完全遍历来计算元素的方式实现。即使有反思,你也无法做到这一点。
如果您查看源代码,您会发现它在内部使用了两个ImmutableStack
s,并ImmutableStack
用 head 和 tail 表示(其中 tail 是 another ImmutableStack
)。因此,要计算出元素的数量,您必须计算这些堆栈中的元素数量,并且要做到这一点 - 您必须完全遍历它们。所以这个实现的计数复杂度ImmutableQueue
总是线性的。
因此,如果您绝对需要它 - 只需使用IEnumerable.Count()
扩展方法,因为无论如何您都无法做得更好。
推荐阅读
- react-native - React Native Navigation 允许在部分屏幕材质顶部导航器上滑动
- azure-cosmosdb - GetItemLinqQueryable 不返回任何项目
- c - 内联汇编后指针取消引用 (SIGSEGV) 失败
- mysql - 从 3 个表中获取值到汇总表 SQL
- html - 如何使用golang连接锚标记的href属性中的变量值
- docker - Kubernetes 中部署的 Apache 气流中的 Kubernetes 执行程序和私有 Docker 映像无法正常工作
- wordpress - 如果用户未登录,Wordpress 重定向到登录页面
- python - 如何在odoo中的特定操作中替换记录名称?
- xml - Linq XML 更改参数
- android - 我的 android 应用程序在使用时崩溃,并且 Android Studio 显示“FATAL EXCEPTION”