C# linq 最大、最小对象的扩展

public static class LinqExtension
	{
		public static T MaxBy<T, TR>(this IEnumerable<T> en, Func<T, TR> evaluate) where TR : IComparable<TR>
		{
			return en.Select(t => new Tuple<T, TR>(t, evaluate(t)))
				.Aggregate((max, next) => next.Item2.CompareTo(max.Item2) > 0 ? next : max).Item1;
		}

		public static T MinBy<T, TR>(this IEnumerable<T> en, Func<T, TR> evaluate) where TR : IComparable<TR>
		{
			return en.Select(t => new Tuple<T, TR>(t, evaluate(t)))
				.Aggregate((max, next) => next.Item2.CompareTo(max.Item2) < 0 ? next : max).Item1;
		}

	}

  

posted @ 2018-01-03 10:05  会弹猫的吉他  阅读(867)  评论(0编辑  收藏  举报