gpt4 book ai didi

c# - 如何在不使用 OrderBy 的情况下从点数组中获取具有最小 X 的点?

转载 作者:行者123 更新时间:2023-11-30 15:12:11 25 4
gpt4 key购买 nike

想象一下

 var points = new Point[]
{
new Point(1, 2),
new Point(2, 3)
};

为了得到我能用最小 X 的点:

 var result = points.OrderBy(point => point.X).First();

但对于大型阵列,我认为这不是更快的选择。有更快的选择吗?

最佳答案

更好用

int x = points.Min(p => p.X);
var result = points.First(p => p.X == x);

因为这消除了对该列表进行排序的必要性(即,它是 O(n) 而不是 O(n log n))。此外,它比使用 OrderByFirst 更清晰。

您甚至可以编写如下扩展方法:

static class IEnumerableExtensions {
public static T SelectMin<T>(this IEnumerable<T> source, Func<T, int> selector) {
if (source == null) {
throw new ArgumentNullException("source");
}

int min = 0;
T returnValue = default(T);
bool flag = false;

foreach (T t in source) {
int value = selector(t);
if (flag) {
if (value < min) {
returnValue = t;
min = value;
}
}
else {
min = value;
returnValue = t;
flag = true;
}
}

if (!flag) {
throw new InvalidOperationException("source is empty");
}

return returnValue;
}

用法:

IEnumerable<Point> points;
Point minPoint = points.SelectMin(p => p.X);

您可以概括您的需求。这样做的好处是它避免了两次遍历列表的可能性。

关于c# - 如何在不使用 OrderBy 的情况下从点数组中获取具有最小 X 的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574330/

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