如何在不使用快捷方式的情况下从列表中返回最低值?

时间:2015-01-25 21:34:43

标签: c# .net

我得到了一个数字列表,{1,2,3,4,5,6,7}。我被要求在不使用快捷方式的情况下返回最低值,例如.Min()等。

2 个答案:

答案 0 :(得分:0)

你可以用老式的命令方式做到这一点。适用于所有类似的类型:

public static class MyEnumerableExtensions
{
    public static T Min<T>(this IEnumerable<T> list) where T : IComparable<T>
    {
        if (list == null)
        {
            throw new ArgumentNullException("list");
        }
        T min = default (T);
        bool initialized = false;
        foreach (T elem in list)
        {
            if (!initialized)
            {
                min = elem;
                initialized = true;
            }
            else if (min == null) // Do not compare with null, reset min
            {
                min = elem;
            }
            else if (elem != null && min.CompareTo(elem) > 0) // Compare only when elem is not null
            {
                min = elem;
            }
        }
        if (!initialized)
        {
            throw new InvalidOperationException("list is empty");
        }
        return min;
    }
}

用法:

var min1 = list.Min();
var min2 = MyEnumerableExtensions.Min(list);

此外,只有Min方法仅限于Linq,可能还有其他技巧。仅适用于数字:

var minViaMax = -list.Select(x => -x).Max();
var minViaAggregate = list.Aggregate(Math.Min);

答案 1 :(得分:0)

我不会直接为您解答您的作业问题,但是为了让您开始循环浏览列表并跟踪您找到的最小的问题。当你完成后,找到的最小值是列表中最小的。

对于你的第二部分,它只是基本的问题解决。看看问题,把它分成小块。例如,对于您的问题,您可以将其分解为:

  • 如何循环列表
  • 我如何记住循环之间的值
  • 如果记住的值小于当前循环值
  • ,我该如何比较
  • 如果当前循环值较小,如何替换记住的值

然后单独解决每一件事。