Возврат наиболее подходящего элемента из коллекции в C#3.5 всего за одну-две строки

Вот пример кода, который я писал тысячи раз в своей жизни:

// find bestest thingy
Thing bestThing;
float bestGoodness = FLOAT_MIN;
foreach( Thing x in arrayOfThings )
{
  float goodness = somefunction( x.property, localvariable );
  if( goodness > bestGoodness )
  {
    bestGoodness = goodness;
    bestThing = x;
  }
}
return bestThing;

И мне кажется, что C#уже должен иметь что-то, что делает это всего за одну строку. Что-то вроде:

return arrayOfThings.Max( delegate(x)
  { return somefunction( x.property, localvariable ); });

Но это не возвращает предмет (или индекс предмета, который был бы в порядке), который возвращает значение качества-соответствия-.

Так что, может быть, что-то вроде:

var sortedByGoodness = from x in arrayOfThings 
  orderby somefunction( x.property, localvariable ) ascending 
  select x;
return x.first;

Но это делает весь массив целиком и может быть слишком медленным.

Существует ли это?

8
задан PeeHaa 1 January 2013 в 18:39
поделиться