「collidedrects」の長方形のリストがあります。最大の面積を持つ長方形を関数_playership.Collide()に渡します。これまでのところ...
var item = collidedrects.Max(x => x.Height*x.Width);
_playership.Collide(collidedrects[item]);
私はmaxとC#の=>のことにも精通していません
Aggregate
代わりにMax
、最大の長方形を見つけるために使用できます。
var largestRect = collidedrects.Aggregate( (r1,r2) =>
(r1.Height * r1.Width) > (r2.Height * r2.Width) ? r1 : r2);
_playership.Collide(largestRect);
問題はMax
、値を生成したアイテムではなく、比較した値を返すことです。MaxBy
値を生成したアイテムを返す 関数を作成すると、問題なく機能します。
public static TSource MaxBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> selector, IComparer<TKey> comparer = null)
{
comparer = comparer ?? Comparer<TKey>.Default;
using (IEnumerator<TSource> sourceIterator = source.GetEnumerator())
{
if (!sourceIterator.MoveNext())
{
throw new InvalidOperationException("Sequence was empty");
}
TSource max = sourceIterator.Current;
TKey maxKey = selector(max);
while (sourceIterator.MoveNext())
{
TSource candidate = sourceIterator.Current;
TKey candidateProjected = selector(candidate);
if (comparer.Compare(candidateProjected, maxKey) > 0)
{
max = candidate;
maxKey = candidateProjected;
}
}
return max;
}
}
それであなたはすることができます:
var item = collidedrects.MaxBy(x => x.Height*x.Width);
_playership.Collide(collidedrects[item]);