Подтвердить что ты не робот

Введение в списки С#

Как я могу выполнять проверки списков в С#?

4b9b3361

Ответ 1

A List Consrehension - это тип набора нотации, в котором программист может описать свойства, которые должны соответствовать членам набора. Он обычно используется для создания набора, основанного на других, уже существующих, наборах или наборах, путем применения какого-либо типа комбинации, преобразования или сокращения к существующим наборам.

Рассмотрим следующую проблему: у вас есть последовательность из 10 чисел от 0 до 9, и вам нужно извлечь все четные числа из этой последовательности. На языке, таком как версия С# версии 1.1, вы были в значительной степени ограничены следующим кодом для решения этой проблемы:

ArrayList evens = new ArrayList();
ArrayList numbers = Range(10);
int size = numbers.Count;
int i = 0;

while (i < size) 
{
    if (i % 2 == 0) 
    {
        evens.Add(i);
    }
    i++;
}

В приведенном выше коде не показана реализация функции Range, которая доступна в списке полного кода ниже. С появлением С# 3.0 и .NET Framework 3.5 в CY-программировании теперь доступна нотация на основе списка, основанная на Linq. Вышеупомянутый код С# 1.1 можно портировать на С# 3.0 следующим образом:

IEnumerable<int> numbers = Enumerable.Range(0, 10);
var evens = from num in numbers where num % 2 == 0 select num;

И, с технической точки зрения, вышеприведенный код С# 3.0 можно записать как однострочный, переместив вызов на Enumarable. Перейдите к выражению Linq, которое генерирует последовательность evens. В С# List Consrehension я уменьшаю заданные числа, применяя функцию (по модулю 2) к этой последовательности. Это создает последовательность эвенов намного более кратким образом и не допускает использования синтаксиса цикла. Теперь вы можете спросить себя: это чисто синтаксический сахар? Я не знаю, но я определенно исследую и, возможно, даже задаю вопрос сам. Я подозреваю, что это не просто синтаксический сахар, а некоторые истинные оптимизации, которые можно сделать, используя базовые монады.

Полный список кодов доступен здесь.

Ответ 2

Обнаружено это, когда я искал, как сделать список в С#...

Когда кто-то говорит о понимании списков, я сразу думаю о Python. В приведенном ниже коде создается список, который выглядит следующим образом:

[0,2,4,6,8,10,12,14,16,18]

Путь Python выглядит следующим образом:

list = [2*number for number in range(0,10)]

В С#:

var list2 = from number in Enumerable.Range(0, 10) select 2*number;

Оба метода оцениваются лениво.

Ответ 3

@Ian P

 return (from user in users
         where user.Valid
         select user.Name).ToArray();

Ответ 5

Хотя это не учебник, вот какой-то код, который иллюстрирует концепцию:

public List<string> ValidUsers(List<User> users) {
  List<string> names = new List<string>();
  foreach(User user in users) {
    if(user.Valid) {
      names.Add(user.Name);
    }
  }
  return names;
}