我有一本字典,其中包含所有具有相应年龄的用户。
Dictionary<string,int> AllUsers;
Run Code Online (Sandbox Code Playgroud)
我有一个特定用户的列表。
List<String> Users;
Run Code Online (Sandbox Code Playgroud)
我想过滤第一个字典AllUsers
,只使用SpecificUsers
列表中包含他们名字的用户。
我已经用循环手动做了一些事情,但我想使用 linq 表达式,但我对它们不是很熟悉。
在此先感谢您的帮助
它可能工作
var newdict = AllUsers.Where(x => Users.Contains(x.Key))
.ToDictionary(val => val.Key, val => val.Value);
Run Code Online (Sandbox Code Playgroud)
它将使用Users
列表中的字典中的所有用户创建新字典(因为 linq 用于查询而不是更新)。您需要使用ToDictionary
来实际制作字典。
编辑:正如@Rawling 所说,过滤字典而不是列表会更高效。@Luaan答案中存在的解决方案(我不会像某些人那样复制它)
你可以过滤Users
:
Users.Where(i => AllUsers.ContainsKey(i)).Select(i => new { User = i, Age = AllUsers[i] });
Run Code Online (Sandbox Code Playgroud)
这样做的主要好处是您使用索引AllUsers
进行过滤,因此您的总计算复杂度仅取决于Users
(Dictionary.Contains
是 O(1)) 中的用户数量- 天真的方法往往是Users * AllUsers
。
如果你想要一个关于输出的字典,就像将.Select(...)
上面的替换为
.ToDictionary(i => i, i => AllUsers[i])
Run Code Online (Sandbox Code Playgroud)