gpt4 book ai didi

c# - C# 是否有 std::nth_element 等价物?

转载 作者:IT老高 更新时间:2023-10-28 23:00:35 27 4
gpt4 key购买 nike

我正在将一些 C++ 代码移植到 C#。

C# 是否有等价于 std::nth_element()还是我需要自己动手?

最佳答案

我假设您正在寻找一个访问器,该访问器通过对集合执行部分排序来返回无序集合的第 N 个元素。当您有一个非常大的集合并且对基于某些排序谓词的第一个元素感兴趣。

据我所知,.NET BCL 或 LINQ 扩展都没有提供等价物。所有排序方法(包括 Enumerable.OrderBy)都执行集合的完整排序。

如果您需要 Nth 的高效版本,则需要在 IEnumerable 上滚动您自己的扩展方法。如果您要推出自己的产品,您可能需要查看 Quick Select algorithm ,具有 O(n) 的性能。

如果蛮力版本足够,您可以使用 LINQ:

var someCollection = new []{ 5, 2, 8, 9, 0, 1, 3, 12, 4 };

var fifthItem = someCollection.NthItem(5);

public static class NthExtensions
{
public static T NthItem(this IEnumerable<T> coll, int n)
{
return coll.OrderBy(x => x).Skip(n - 1).First();
}
}

关于c# - C# 是否有 std::nth_element 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540602/

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