Как использовать лямбда-выражение для выбора конкретного элемента?

1

Я просто изучаю лямбда-выражение, и я хочу использовать лямбда-выражение для выбора любого конкретного элемента. Здесь я хочу выбрать человека с ключом = 1, так что selectedOne = "sanjay"

    var people = new Dictionary<int, string>();
    people.Add(1, "sanjay");
    people.Add(2, "roshan");
    people.Add(3, "neejesh");
    people.Add(4, "deep");   
    var selectedOne = people.Select(x => x.Key == 1);

Как мне построить свой лямбда-запрос?

Благодарю!

  • 2
    Сначала отфильтруйте с помощью Where а затем получите результат с помощью Select .
  • 0
    Зачем использовать LINQ со словарем вместо поиска, например: people[1] ?
Теги:
lambda

4 ответа

8

Dictionary реализует IEnumerable KeyValuePair который содержит свойство Key и Value:

var selectedOne = people.First(x => x.Key == 1).Value;

Вы используете неправильный метод LINQ. Select используется для проецирования некоторых значений (преобразование одного в другое). Вместо этого вам нужно отфильтровать (поиск по указанному ключу).

Но... использование LINQ для выбора словарного ключа неэффективно. Лучше:

var selectedOne = people[1];

Он амортизировал O (1) против O (n) - огромную разницу.

2

Вы хотите использовать вызов Where, чтобы отфильтровать набор результатов для человека, которого вы хотите, затем используйте "Выбрать", чтобы определить результаты, которые вы хотите, например

var selectedOne = people.Where(x => x.Key == 1).Select(x => x.Value).First();

Было бы гораздо эффективнее выполнять поиск по индексу словарей, как это было предложено pwas

  • 0
    спасибо. работал для меня
0

Похоже, вы смешиваете концепцию Lambda Expression и LINQ. Вы использовали Lambda Expression. Но если вам нужно использовать LINQ первое условие - сбор данных, который вы используете, должен реализовывать интерфейс IEnumerable например LIST<T> Теперь напишите свой код LINQ как:

var selectedOne = (from p in people
                  select p
                  where p.Key == "1").Single()
0

Код должен выглядеть примерно так:

var selectedOne = people.Single(x => x.Key == 1);

Это даст вам пару значений ключа. Если вы хотите только строку:

var selectedOne = people.Single(x => x.Key == 1).Value;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню