Выберите логическое выражение внутри словаря, используя лямбда-выражение - PullRequest
0 голосов
/ 07 марта 2012

У меня есть словарь, объявленный следующим образом.

public static Dictionary<int?, List<int?>> pegMap = new Dictionary<int?, List<int?>>();

Теперь я пытаюсь проверить, содержит ли список внутри словаря какое-либо значение, где ключом словаря является какое-то значение.

if (pegMap.Select(y => y.Value.Contains(disc)).Where(x => x.Equals(key)))
{
    peg = (int)key;
}

Но компилятор злится и выдает мне ошибку примерно так -

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<bool>' to 'bool'

Что я здесь не так делаю.Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

Похоже, вы полностью игнорируете тот факт, что вы используете словарь . Звучит так, как будто вы хотите:

public bool CheckMap(int? key, int? checkValue)
{
    List<int?> values;
    if (!pegMap.TryGetValue(key, out values))
    {
        return false;
    }
    return values.Contains(checkValue);
}
1 голос
/ 08 марта 2012

Я думаю, что ответ Джона Скита гораздо эффективнее, но если лямбда важнее всего остального (вздох), вы можете попробовать

pegMap.Any(x => x.Key == key && x.Value.Contains(disc))
1 голос
/ 07 марта 2012

Where возвращает коллекцию, вместо этого вы хотите проверить, существует ли значение Any, удовлетворяющее x.Equals(key)

Dictionary<int?, List<int?>> pegMap = new Dictionary<int?, List<int?>>()
{
    { 1, new List<int?> {1,2,3} },
    { 2, new List<int?> {4,5,6} },
    { 3, new List<int?> {1,4,5} },
    { 4, new List<int?> {6,7,8} },
};

int? key = 2;
int? value = 4;

if (pegMap.Where(p => p.Key == key).Any(p => p.Value.Any(v => v == value)))
{ 
   // returns true;
}

// You can also use
bool result = pegMap.ContainsKey(key) && pegMap[key].Contains(value);
...