簡體   English   中英

C#,max,在列表中找到面積最大的矩形

[英]C#, max, find rectangle in list with biggest area

我有一個矩形列表“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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM