在Dictionary <int,list <int >>中查找值

时间:2019-01-14 13:48:56

标签: c# linq dictionary

我有一本带有int键和列表值的字典

我想找出键或值是否包含特定的整数并获取相关的键。

示例:

Dictionary<int, List<int>> removableStuff = new Dictionary<int, List<int>>();

removableStuff.Add(1, new List<int> {1});
removableStuff.Add(3, new List<int> {9,33,35});
removableStuff.Add(2, new List<int> {1,65,32,3});

我想找到数字3。 由于可以找到数字3作为键和值,因此输出为:3、2。

2 个答案:

答案 0 :(得分:5)

这应该产生预期的结果:

models.Delegate.belongsTo(models.User, {foreignKey: 'createdBy'});

如果不想处理Enumerable,可以选择在var num = 3; var keys = removableStuff.Where(i => i.Key.Equals(num) || i.Value.Any(num.Equals)) .Select(i => i.Key); 之后调用.ToList()

.Select()也可以简化为i.Value.Any(num.Equals),但是当我使用Linq时,我也喜欢将i.Value.Contains(num)用于此类内容。 (仅出于个人喜好)

尽管如此,这是非常基本的Linq,我相信您会在询问之前找到答案,

答案 1 :(得分:0)

类似于Tobias的答案的方法是使用Contains而不是Any(Equals)

Dictionary<int, List<int>> removableStuff = new Dictionary<int, List<int>>
{
    {1, new List<int> {1}},
    {3, new List<int> {9, 33, 35}},
    {2, new List<int> {1, 65, 32, 3}}
};

int find = 3;

var matches = removableStuff.Where(item => item.Key == find || item.Value.Contains(find));

foreach (var match in matches)
{
    Console.WriteLine($"{match.Key}: {string.Join(", ", match.Value)}");
}

enter image description here