如何查找字典中的内部哈希集和 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 或来自服务器端单例)无需搜索任何组对于那种情况下的其他成员,我可以想象。
我正在尝试在词典中存储 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 或来自服务器端单例)无需搜索任何组对于那种情况下的其他成员,我可以想象。