c# рефакторинг с помощью запроса linq - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь улучшить синтаксическое кодирование linq, и мне было интересно, может ли кто-нибудь показать мне лучший способ написания этого кода ниже. Вопрос взят из leetcode https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/. Спасибо

        public static IList<bool> KidsWithCandies(int[] candles, int extraCandies)
        {
           var kidCandle = candles.Select(x => x+ extraCandies);
           var con = new List<bool>();
            foreach(var kid in kidCandle)
            {
                if (kid >= candles.Max())
                    con.Add(true);
                else
                    con.Add(false);
            }

           return con;
        }

https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/

1 Ответ

3 голосов
/ 29 мая 2020

Linq также выполняет цикл, но только синтаксис c сахар, но мы можем написать Select для foreach. Таким образом, код:

var con = new List<bool>();
foreach(var kid in kidCandle)
{
    if (kid >= candles.Max())
        con.Add(true);
    else
        con.Add(false);
}

можно заменить на:

public static IList<bool> KidsWithCandies(int[] candles, int extraCandies)
{
   var kidCandle = candles.Select(x => x+ extraCandies);
   var maxCandles = candles.Max();
   var con = kidCandle.Select(kid => (kid >= maxCandles)).ToList();
   return con;
}

, даже весь метод может быть записан как:

public static IList<bool> KidsWithCandies(int[] candles, int extraCandies)
{
    var maxCandles = candles.Max();
    return candles.Select(x => x+ extraCandies)
                 .Select(kid => (kid >= maxCandles)).ToList();
}

Теперь проще:

public static IList<bool> KidsWithCandies(int[] candles, int extraCandies)
{
   var maxCandles = candles.Max();
   var con = candles.Select(kid => (kid + extraCandies >= maxCandles)).ToList();
   return con;
}

мы можем даже избежать var:

 public static IList<bool> KidsWithCandies(int[] candles, int extraCandies)
 {
     var maxCandles = candles.Max();     
     return candles.Select(kid => (kid + extraCandies >= maxCandles)).ToList();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...