【发布时间】:2020-02-05 17:00:26
【问题描述】:
我正在尝试将 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# 中使用字典。 我有大约 20k 组和许多用户。它是否使用单例模式处理过多的组和用户(存储在内存中)?
希望有人帮助我提供一个可行的示例。我是这里的初学者。谢谢!
【问题讨论】:
-
"我想查找 "user3",它应该返回 ["GroupA","GroupB"]。"如果你想按组查找成员,你应该按组存储成员,按成员分组!。
-
我正在努力做到这一点:大约 20k 左右的组太多,用户会订阅他们的列表。用户登录并发送组 ID 列表。 Hub 会将此用户添加到组中。没关系。但是如果这个用户发送一个新的组列表,那么集线器应该从所有加入的组中删除这个用户,并将这个用户添加到这个新的组 id 列表中进行订阅。你有解决这个问题的想法吗?谢谢@AKX
-
对于一个简单的解决方案(对于 20k 组可能会占用一些内存),同时存储“username-to-groupnames”和“groupname-to-usernames”字典。
-
它的倍数太多了,不是吗?将它们存储在 sql 中并再次从那里获取是个好主意吗?因为,对于 5k 用户来说,20.000x5.000 = 100m 所以这对于内存来说真的是巨大的数据,不是吗? 20k 也可能超过 50k
-
您没有提到 SQL 是一个选项。如果是,那么一定要这样做——SQL 数据库擅长这种事情。
SELECT group_name FROM user_groups WHERE user_name='foo'.
标签: c# dictionary .net-core hashset