如何查找字典中的内部哈希集和 C# 中的 return 键值?

How to lookup inner hashset in dictionary and return key value in c#?

我正在尝试在词典中存储 signalR 组>

但我不知道如何在 HashSet 中查找字符串值和 return 键字符串?

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

我想查找 "user3",它应该 returns ["GroupA","GroupB"]。我不知道如何在 C# 中使用字典。 我有大约 20k 组和其中的许多用户。它是否使用单例模式(存储在内存中)处理过多的组和用户?

希望有人能帮我举一个工作示例。我是这里的初学者。谢谢!

您需要遍历 字典,并获取指向哈希集的所有键,该哈希集包含您要获取的值寻找:

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

解释:
您正在请求所有键值对,其中 Value(我们知道它是 Hashset 类型)包含您要查找的字符串。

Update:要从键值对中获取键,我相信你可以这样做:

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

进一步思考:如果您的用例始终优先查找用户,也许您应该倒转字典:将用户名作为键,将用户所属的组作为值。这样,查找用户的所有组将是 O(1)。

视情况回答:

  • 如果 SQL 是一个选项,那么在加载之前在 SQL 中执行此操作。总的来说效率更高。
  • 如果您总是需要按用户搜索,翻动词典,按成员列出群组。
  • 如果查找发生在服务器端,我会使用两个词典:1 个成员按组,1 个按成员分组。这会使内存使用量翻倍,但如果您可以让这些单例为来自相同实例的所有客户端提供服务,那么影响应该是有限的。
  • 如果查找发生在客户端,则只为他们所属的每个用户加载一个迷你组列表(来自 SQL 或来自服务器端单例)无需搜索任何组对于那种情况下的其他成员,我可以想象。