我得到了一个数字列表,{1,2,3,4,5,6,7}。我被要求在不使用快捷方式的情况下返回最低值,例如.Min()
等。
答案 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)
我不会直接为您解答您的作业问题,但是为了让您开始循环浏览列表并跟踪您找到的最小的问题。当你完成后,找到的最小值是列表中最小的。
对于你的第二部分,它只是基本的问题解决。看看问题,把它分成小块。例如,对于您的问题,您可以将其分解为:
然后单独解决每一件事。