gacar Ответов: 1

Как сравнить два словаря


У меня есть словарь, используемый
Dim Used As New Dictionary(Of Integer, Boolean)
111,true
5,true
125,true

У меня есть второй словарь ByteDic
Dim ByteDic As Dictionary(Of byte, Integer)
111,1233
22,334
125,123
10, 128

Я хочу, выберите максимальное значение ByteDic, что ключ не содержит по Используется (я хочу, чтобы выбрать значение 334 от ByteDic)

Что я уже пробовал:

int MaxValue = ByteDic.Select(x => Used.Keys.ToList.IndexOf(x.Key) > -1).Max;

Dim MaxValue As Integer = ByteDic.Select(Function(x) Used.Keys.ToList.IndexOf(x.Key) > -1).Max

1 Ответов

Рейтинг:
7

Graeme_Grant

С помощью выберите на сравнении, вам останется только получить результат типа bool. Вам нужно использовать сравнение в Where заявление.

Кроме того, используя ToList внутри запроса Linq ToList будет называться для каждого сравнение, которое крайне неэффективно. Поэтому вам будет лучше использовать временную переменную, содержащую список, чтобы она вызывалась только один раз.

Имея это в виду, я бы предложил использовать что-то вроде:

Dim result = ByteDic.Where(Function(x) Not used.Any(Function(y) y.Key.Equals(x.Key))).Max(Function(x) x.Value)

или
Dim result = ByteDic.Where(Function(x) Not used.Keys.Contains(x.Key)).Max(Function(x) x.Value)

или
Dim result = ByteDic.Where(Function(x) Not used.ContainsKey(x.Key)).Max(Function(x) x.Value)


gacar

Большое спасибо Graeme_Grant за решение и пояснительную информацию. Другие выражения работали, кроме первого.

Graeme_Grant

Рад, что это помогло ... первый из них должен был сработать, однако был непроверен с моей головы.