gpt4 book ai didi

ironpython - 获取IEnumerable的长度?

转载 作者:行者123 更新时间:2023-12-04 18:15:46 27 4
gpt4 key购买 nike

在IronPython中获取.net IEnumerable<T>长度的最快方法是什么? Python标准len()函数似乎无法在其上运行。

我知道我能做

len(list(my_enumerable))

或者
list(my_enumerable).Count

但这可能比必要的要慢。

最佳答案

你知道它是否真的实现了IEnumerable<T>吗?如果是这样,则可以使用 Enumerable.Count(IEnumerable<T> source) (LINQ to Objects的一部分)。

我不知道非通用IEnumerable的等效方法-尽管您可以很容易地自己实现这种方法。在C#中,它看起来像这样:

public static int Count(IEnumerable source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}

// Optimization for ICollection implementations (e.g. arrays, ArrayList)
ICollection collection = source as ICollection;
if (collection != null)
{
return collection.Count;
}

IEnumerator iterator = source.GetEnumerator();
try
{
int count = 0;
while (iterator.MoveNext())
{
count++;
}
return count;
}
finally
{
IDisposable disposable = iterator as IDisposable;
if (disposable != null)
{
disposable.Dispose();
}
}
}

请注意,在最后放置迭代器很重要-但您不能使用 using语句,因为 IEnumerator本身不会实现 IDisposable(与 IEnumerator<T>不同)。

当然,您可以在类库中将其用作C#从IronPython进行调用,也可以自己将代码转换为IronPython。

关于ironpython - 获取IEnumerable的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3694079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com