gpt4 book ai didi

c# - 什么是 Python 的最小值/最大值的 C# 等价物

转载 作者:太空狗 更新时间:2023-10-30 01:23:39 28 4
gpt4 key购买 nike

以下 Python 的最小/最大代码在 C# 中的等效性是什么:

pairs = [ (2,"dog"), (1, "cat"), (3, "dragon"), (1, "tiger") ]

# Returns the PAIR (not the number) that minimizes on pair[0]
min_pair = min(pairs, key=lambda pair:pair[0])

# this will return (1, 'cat'), NOT 1

C#的Enumerable.Min好像很接近。但是根据its MSDN doc ,它总是返回最小化值(不是原始对象)。我错过了什么吗?

编辑


请注意 - 我不倾向于通过先排序来实现这一点,因为排序 (O(nlogn)) 在计算上比找到最小值 (O(n)) 更重。

另请注意 - 字典也不是理想的方法。它无法处理存在重复键的情况 - (1, "cat") 和 (1, "tiger")。

更重要的是,字典无法处理要处理的项目是复杂类的情况。例如,使用年龄作为键在动物对象列表中找到最小值:

class Animal
{
public string name;
public int age;
}

最佳答案

BCL没有 MinBy 函数,但自己编写一个很容易。

public static T MinBy<T, C>(this IEnumerable<T> items, Func<T, C> projection) where C : IComparable<C> {
return items.Aggregate((acc, e) => projection(acc).CompareTo(projection(e)) <= 0 ? acc : e);
}

您可以选择编写比我更复杂的 MinBy,以避免重新评估投影。无论如何,一旦有了 MinBy 函数,就可以轻松解决问题:

var pairs = new[] {Tuple.Create(2,"dog"), Tuple.Create(1, "cat"), Tuple.Create(3, "dragon"), Tuple.Create(1, "tiger")};
var min_pair = pairs.MinBy(e => e.Item1);

关于c# - 什么是 Python 的最小值/最大值的 C# 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10793554/

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