Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对于此场景,最合适的集合是什么?_C#_.net_Collections - Fatal编程技术网

C# 对于此场景,最合适的集合是什么?

C# 对于此场景,最合适的集合是什么?,c#,.net,collections,C#,.net,Collections,基于.NET/C的最新版本,在这种情况下,最合适的集合是什么?我需要返回组id与用户id的映射。因此,考虑一个映射,如下面的示例,其中组111有2个用户222和444: 111 222 111 444 555 222 KeyValuePair不是最有效的b/c数据反映了多对多关系。您需要的数据结构称为“multimap”、“multidictionary”或“multivaluedictionary”,具体取决于您询问的对象 有很多这样的实现;做一个网络搜索,你会发现一些。例如: 依此类推

基于.NET/C的最新版本,在这种情况下,最合适的集合是什么?我需要返回组id与用户id的映射。因此,考虑一个映射,如下面的示例,其中组111有2个用户222和444:

111 222
111 444
555 222

KeyValuePair不是最有效的b/c数据反映了多对多关系。

您需要的数据结构称为“multimap”、“multidictionary”或“multivaluedictionary”,具体取决于您询问的对象

有很多这样的实现;做一个网络搜索,你会发现一些。例如:


依此类推。

您想要的数据结构称为“multimap”、“multidictionary”或“multivaluedictionary”,具体取决于您询问的对象

有很多这样的实现;做一个网络搜索,你会发现一些。例如:


等等。

不幸的是,
LookUp
类不是完全公开的,但是您可以使用Linq来创建它:

public class GroupUserid {
    public int group;
    public int userid;
}

var rawdata = List<GroupUserid>();
var groupMembership = rawdata.ToLookup(d => d.group, d => d.userid);

不幸的是,
LookUp
类不是完全公开的,但是您可以使用Linq来创建它:

public class GroupUserid {
    public int group;
    public int userid;
}

var rawdata = List<GroupUserid>();
var groupMembership = rawdata.ToLookup(d => d.group, d => d.userid);

如果你想找出的是一个组中的用户,一个特定的用户是否在一个给定的组中是最有效的(也就是说,对于成千上万的用户),但是你不需要在确定单个用户的组中有什么效率,你也可以考虑使用

Dictionary<int, HashSet<int>> users = new Dictionary<int, HashSet<int>>();

// Adding a new group:
users[newGroup] = new HashSet<int>();

// Adding a new user to the group:
users[newGroup].Add(newUser);

// Then to find all users in a group:
HashSet<int> usersInAGroup = users[aGroup];

// If you want to know very fast if a specific user is in this group, then:
if (usersInAGroup.Contains(aUser)) {/* yes, the given user is in this group */};
字典用户=新建字典();
//添加新组:
用户[newGroup]=新HashSet();
//将新用户添加到组中:
用户[newGroup]。添加(newUser);
//然后,要查找组中的所有用户,请执行以下操作:
HashSet usersInAGroup=用户[aGroup];
//如果您想快速了解特定用户是否在此组中,请:
如果(usersInAGroup.Contains(aUser)){/*是,则给定用户位于该组中*/};

HashSet针对许多元素上的Contains()操作进行了特别优化。

如果您只想了解组中的用户以及特定用户是否在给定组中的效率最高(即,对于可能成千上万的用户),但您不必如此高效地确定单个用户在哪些组中,你也可以考虑使用< /P>
Dictionary<int, HashSet<int>> users = new Dictionary<int, HashSet<int>>();

// Adding a new group:
users[newGroup] = new HashSet<int>();

// Adding a new user to the group:
users[newGroup].Add(newUser);

// Then to find all users in a group:
HashSet<int> usersInAGroup = users[aGroup];

// If you want to know very fast if a specific user is in this group, then:
if (usersInAGroup.Contains(aUser)) {/* yes, the given user is in this group */};
字典用户=新建字典();
//添加新组:
用户[newGroup]=新HashSet();
//将新用户添加到组中:
用户[newGroup]。添加(newUser);
//然后,要查找组中的所有用户,请执行以下操作:
HashSet usersInAGroup=用户[aGroup];
//如果您想快速了解特定用户是否在此组中,请:
如果(usersInAGroup.Contains(aUser)){/*是,则给定用户位于该组中*/};

HashSet针对许多元素上的Contains()操作进行了特别优化。

您可以使用Linq并根据您的语句执行GroupBy,“考虑如下示例中的映射,其中组111有2个用户222和444”,这意味着一种一对多关系,并使用KeyValuePairs,因此带有键111的keyvaluepair将具有带有222的列表,444和带有555键的keyvaluepair将具有带有222的列表您如何获得该数据?使用Linq,您可以创建一个方便的iGroup。此外,Linq的
ToLookup
如果您需要查找两个ID,您可以使用两个字典您可以使用Linq并根据您的语句执行GroupBy,“考虑下面的映射,其中组111有2个用户222和444”,这意味着一对多关系,并使用KeyValuePairs,因此,键111的keyvaluepair将具有键222、444的列表,键555的keyvaluepair将具有键222的列表。您如何获取该数据?使用Linq,您可以创建一个方便的iGroup。另外,如果您需要在两个ID上进行查找,您可以使用两个字典