Как вернуть все ключи с определенным значением из списка KeyValuePair (vb.net или C #) - PullRequest
0 голосов
/ 27 октября 2009

Учитывая следующий класс vb.net:

Friend Class PairCollection(Of TKey, TValue)
    Inherits List(Of KeyValuePair(Of TKey, TValue))

    Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
        Me.Add(New KeyValuePair(Of TKey, TValue)(key, value))
    End Sub

    Public Function FindByValue(ByVal value As TValue) As List(Of KeyValuePair(Of TKey, TValue))
        Return Me.FindAll(Function(item As KeyValuePair(Of TKey, TValue)) (item.Value.Equals(value)))
    End Function

End Class

Функция FindByValue возвращает одну KeyValuePair, которая соответствует значению. Однако реализация этого PairCollection может иметь ключ m: 1 к значению, поэтому я хочу вернуть все ключи (и только ключи), которые имеют это значение (их может быть больше одного).

Проблема не стала проще, потому что я новичок в лямбда-выражениях в vb.net и более знаком с C #. Я мог бы написать простую процедуру для перебора коллекции, но я чувствую, что есть лямбда и общий комбинированный подход.

Я думаю, что я пытаюсь сделать что-то вроде следующего:

Public Function FindByValue2(ByVal value As TValue) As List(Of TKey)
    Return Me.FindAll(Function(item As list(of TKey) (item.Value.Equals(value)))
End Function

Связанное с тем, что я пытаюсь сделать, это здесь .

1 Ответ

1 голос
/ 27 октября 2009

Вы делаете это правильно. Вам просто нужно спроецировать вывод с Select.

Public Function FindByValue(ByVal value As TValue) As List(Of TKey)
    Return Me.Where(Function(item) item.Value.Equals(value)) _
             .Select(Function(x) x.Key).ToList()
End Function

Кстати, наследование List почти всегда неправильно. Попробуйте изменить дизайн вашего класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...