Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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# 检查GroupBy键是否存在_C#_Ienumerable - Fatal编程技术网

C# 检查GroupBy键是否存在

C# 检查GroupBy键是否存在,c#,ienumerable,C#,Ienumerable,我有一个这样的分组 var myGroups = dataItems.GroupBy(item => item.ItemType); 如何检查myGroups中是否存在密钥?通常,您会将该分组转换为字典。您可以这样做: var dictionary = dataItems.GroupBy(item => item.ItemType) .ToDictionary(x => x.Key, x => x.ToList()); 如果要检查该词典中是否存在密钥,只需使用

我有一个这样的分组

var myGroups = dataItems.GroupBy(item => item.ItemType);

如何检查myGroups中是否存在密钥?

通常,您会将该分组转换为
字典。您可以这样做:

var dictionary = dataItems.GroupBy(item => item.ItemType)
    .ToDictionary(x => x.Key, x => x.ToList());
如果要检查该词典中是否存在密钥,只需使用:

bool keyExists = dictionary.ContainsKey("someKey");

您可以使用linq的
Any
方法,它可以节省时间,因为它会在找到匹配项后立即停止搜索。

我认为在这种情况下,您不需要将分组转换为字典,搜索将在第一次出现所需键的项时停止

bool exist = myGroups.First(x => x.Key == "keyName") != null;

假设你的意思是你想检查一串钥匙


是的,我有一份我期待的清单,然后我想看看它们是否已经被归还

这里有一种方法可以检查是否存在所有预期的组密钥,可以说效率不高:

var dataToBeGrouped = new []{4,4,1,2,1,2,1};

var grp = dataToBeGrouped.GroupBy(z => z);
var allKeysPresent = grp.Select(g => g.Key)
   .OrderBy(k => k)
   .SequenceEqual(new[]{1,2,4});
其中,
new[]{1,2,4}
是一组有序的预期键

作为顺序检查的替代方法,您可以创建一组实际密钥,然后确保所有密钥都存在:

var keysToCheck = new HashSet<int>(grp.Select(g => g.Key));
var allKeysPresent = new[]{1,2,4}.All(k => keysToCheck.Contains(k));
var keystecheck=newhashset(grp.Select(g=>g.Key));
var allKeysPresent=new[]{1,2,4}.All(k=>keystecheck.Contains(k));
我会使用:

现在您可以同时执行这两项操作,检查密钥是否存在,并在不再次查询的情况下获取项目:

bool typeExists = itemTypeLookup["sampleType"].Any();

GroupBy
相比,GroupBy的优点是您可以随时访问它,而无需再次执行查询。与
ToDictionary
(在
GroupBy
之后)相比,它的优势在于,您可以访问不可用的键,并获得一个空序列,而字典索引器会抛出一个异常。之后不能对loookup进行变异,可以将其用于LINQ查询,因为它返回一个序列。除此之外,查找和字典是相似的,都非常有效。

GroupBy
只返回确实存在的键。那么你的问题是什么?您是否有一个您希望存在的密钥列表?是的,我有一个我希望存在的密钥列表,然后我想查看它们是否已返回。虽然这是正确的,但如果OP希望检查2个密钥,则整个查询必须再次运行。另外,请阅读,因为本网站不鼓励只使用代码的答案。使用复合lambda条件,多个键足够简单吗?很好!我不记得以前用过
Lookup
var itemTypeLookup = dataItems.ToLookup(item => item.ItemType);
bool typeExists = itemTypeLookup["sampleType"].Any();