gpt4 book ai didi

c# - 如何使用 LINQ 在字典中查找元素

转载 作者:行者123 更新时间:2023-11-30 19:08:33 26 4
gpt4 key购买 nike

我有一个代码:

var status = ...
var StatusMapping = new Dictionary<AnotherStatus, IList<Status>>
{
{
AnotherStatus,
new List<Status>
{
Status1,
Status2
}
}
}

foreach (var keyValuePair in StatusMapping)
{
if (keyValuePair.Value.Contains(status))
{
return keyValuePair.Key;
}
}

throw Exception();

我刚接触 C#,是从 Java 转过来的。在 Java 中,它很容易像这样完成:

return StatusMapping
.entrySet()
.stream()
.filter(e -> e.getValue().contains(status))
.map(Map.Entry::getKey)
.findFirst()
.orElseThrow(() -> new Exception());

有没有办法用 LINQ 做到这一点?

最佳答案

首先,如果您经常这样做,您可能需要考虑另一种数据结构。字典并不是真正用于频繁“基于值的某些方面的查找”。

哦,在 C# 中更简单 :)

var key = StatusMapping.First(x => x.Value.Contains(status)).Key;

First()如果没有任何匹配项,将抛出异常。

如果你想以默认值结束,你可以使用:

var key = StatusMapping.FirstOrDefault(x => x.Value.Contains(status)).Key;

这将导致 keyAnotherStatus 的默认值(或任何键类型)。

请注意,这只能完全像这样工作,因为 KeyValuePair<,>是值类型,所以默认值是非空的,带有默认键。如果您有一系列 reference 类型,您将需要如下内容:

var property = sequence.FirstOrDefault(whatever)?.Property;

... 其中 ?.是空条件运算符。

关于c# - 如何使用 LINQ 在字典中查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55420571/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com