Как найти внутренний хэш-набор в словаре и вернуть значение ключа в c#? - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь сохранить группы signalR в Словаре>

Но я не знаю, как найти строковое значение в HashSet и вернуть строку ключа?

    var dict = new Dictionary<string, HashSet<string>>();
    dict["GroupA"] = ["user1","user2","user3"];
    dict["GroupB"] = ["user3", "user4"];
    dict["GroupC"] = ["user4","user5","user6"];

Я хочу посмотреть для "user3", и он должен вернуть ["GroupA", "GroupB"]. Я не знаю о том, как использовать словари в c#. У меня около 20 тысяч групп и много пользователей. Обрабатывает ли он слишком много групп и пользователей с одноэлементным шаблоном (хранить в памяти)?

Надеюсь, кто-нибудь поможет мне с рабочим примером. Я новичок здесь. Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Вам нужно перебрать по словарю и получить все ключи, которые указывают на хэш-набор, который содержит искомое значение:

var matches = dict.Where(kvp => kvp.Value.Contains("user3"));

Объяснение:
Вы запрашиваете все пары ключ-значение, где значение (которое, как мы знаем, относится к типу Hashset) содержит искомую строку.

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

var matches = dict.Where(kvp => kvp.Value.Contains("user3")).Select(kvp => kvp.Key);

Дальнейшие размышления: если ваши сценарии использования всегда будут иметь приоритет при поиске пользователем, возможно, вам следует инвертировать словарь: имя пользователя должно быть ключом, а значением будут группы, к которым принадлежит пользователь. Таким образом, поиск всех групп для пользователя будет O (1).

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