需要将列表编入索引。所以列表可能类似......
BOB [mary,jose,bill,susie]
凯伦[达琳,迈克,斯科特]JUDY [史蒂夫]
WARREN [phillip,matt]
想象一下,这是一个现场活动正在进行的网站列表。对它的查询可能是“嘿,KAREN今天在某个地方主持一个小组吗?如果是的话,她的小组中是scott
”?
需要能够添加和删除组或组成员。
在C#中实现此目的的最佳方法是什么?
更新:根据以下评论,请详细说明。
不会有大量的读取。这是一个聊天应用程序。这些组就是私人聊天组的主题。
我要做的是在浏览器刷新期间保持私有线程成员身份。如果BOB正在他的屏幕上查看实时连接用户列表并且他点击了mary,那么BOB已经启动了一个带有mary的私人线程。他们的UI反映了这一点。我将私人聊天标签添加到其屏幕区域。但是,如果要刷新浏览器,我希望用户界面从服务器中心回忆起他们正在与另一方进行私聊。我的想法是将你的私人线程状态存储在任一聊天客户端上都不够好,因为当你刷新浏览器时它已经消失了。必须存储服务器端并在客户端重新启动时调用它。
因此,如果有100个已连接的用户在线,则可以在任何地方进行一些不同大小的私人对话(此处可能是3组,可能是另一组中的7个,也可能是2个等等)。给定时间。我需要将这个概念坚持到服务器以便在客户端浏览器刷新时进行调用。在刷新时,他们只是重新加入他们最后的小组。
这些组可能是会话ID的列表。所以,假设我正在查看连接用户的屏幕,我会选择列表。我想创建一个包含我的会话ID和她的新组服务器端。后来,何塞加入了我们。我想将他的会话ID添加到我们的线程列表中。如果jose由于某种原因必须刷新页面,那么在刷新时,他会要求服务器查看他的会话ID是否在任何聊天组中。意味着必须在所有当前打开的私人聊天组中搜索他的会话ID(什么数据结构会使这个搜索最容易?)。如果他的会话ID在一个组中,他重新加入它。将创建对话选项卡,并调用并显示对话的消息历史记录。
当他刷新时,也许当时正在进行5次私人谈话。所有这些都应妥善重组。
MS SignalR具有群组概念。使用连接ID。他们不会持续刷新。当你重新连接时,你会得到一个新的,所以它不适合持久化。会话ID更好。我只需要正确的方案来添加,组织,搜索和删除它们。
答案 0 :(得分:1)
如果你总是要有一个名字和一个字符串列表,你可以考虑Dictionary
Dictionary<string,List<string>>
字典允许您使用密钥访问特定值 - 因此访问您使用的“JUDY”
myDictionary["JUDY"];
显然,密钥必须是唯一的。
否则,您可以创建自己的Object,其中包含字符串(“Name”)和List(“GroupMembers”)。您可以使用linq轻松搜索.Where()子句
否则很难确切地知道你想要什么。你想用它做什么?许多人读,很少写?告诉我们您的问题的更多信息。