Информация об изменениях

Сообщение Re[14]: Несколько соображений по дизайну C# от 16.07.2016 8:17

Изменено 16.07.2016 8:56 Serginio1

Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Это уже лирика, естественно правильный выбор алгоритма решает. При этом поиск минимального элемента — вполне практичный алгоритм, и имеет вполне реальные применения.


Linq писался под SQL, а там Min Max немного другой
https://msdn.microsoft.com/ru-ru/library/bb548726(v=vs.110).aspx

Одна из реализаций

public static Nullable<double> Max<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, Nullable<double>> selector
)


То есть обычная схема это получение максимального элемента.
var МаксимальноеЗначение=Список.Where(значение =>значение!=null).DefaultIfEmpty().Max(значение =>значение.СравниваемоеПоле);
//var МаксимальноеЗначение=Список.DefaultIfEmpty().Max(p => p == null ? 0 : p.X)

if (МаксимальноеЗначение!=null)
   Result=Список.Where(значение =>значение .СравниваемоеПоле==МаксимальноеЗначение).First();


Так все и поступают.
Но если ты хочешь сократить вычисления, или сделать вычисления аналогичными C++ min_element то никто не мешает тебе сделать расширения.
Re[14]: Несколько соображений по дизайну C#
Здравствуйте, Evgeny.Panasyuk, Вы писали:


EP>Это уже лирика, естественно правильный выбор алгоритма решает. При этом поиск минимального элемента — вполне практичный алгоритм, и имеет вполне реальные применения.


Linq писался под SQL, а там Min Max немного другой
https://msdn.microsoft.com/ru-ru/library/bb548726(v=vs.110).aspx

Одна из реализаций

public static Nullable<double> Max<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, Nullable<double>> selector
)


То есть обычная схема это получение максимального элемента.
var МаксимальноеЗначение=Список.Where(значение =>значение!=null).Max(значение =>значение.СравниваемоеПоле);
//var МаксимальноеЗначение=Список.DefaultIfEmpty().Max(p => p == null ? 0 : p.X)

if (МаксимальноеЗначение!=null)
   Result=Список.Where(значение =>значение .СравниваемоеПоле==МаксимальноеЗначение).First();


Так все и поступают.
Но если ты хочешь сократить вычисления, или сделать вычисления аналогичными C++ min_element то никто не мешает тебе сделать расширения.