我有列表,如果Guids和我想检查字典中是否有任何guid作为键

时间:2014-05-06 16:40:23

标签: c# .net c#-4.0

我有

List<Guid> id

我的字典:

manager.DriveTimes.Containskey(id)

如何检查是否有任何id作为字典中的键存在。 我想一次性检查而不使用针对List id的for循环。

任何建议

3 个答案:

答案 0 :(得分:2)

idList.Any(id => manager.DriveTimes.ContainsKey(id));

答案 1 :(得分:1)

您可以使用 System.Linq 中的相交扩展名。

bool anyGuids = manager.DriveTimes.Keys.Intersect(id).Any()

答案 2 :(得分:0)

仅仅为了完成,这里有一些性能比较

        List<Guid> listA = new List<Guid>();
        for (int count = 0; count < 10000; count++)
        {
            listA.Add(Guid.NewGuid());
        }

        List<Guid> listB = new List<Guid>();
        for (int count = 0; count < 10000; count++)
        {
            listB.Add(Guid.NewGuid());
        }

        // Match by Any without matches.
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        bool matchFound = listA.Any(item => listB.Contains(item));
        sw.Stop();
        Console.WriteLine("List Match {0}ms", sw.ElapsedMilliseconds);

        System.Collections.Generic.Dictionary<Guid, string> dictA = new System.Collections.Generic.Dictionary<Guid, string>();
        for (int count = 0; count < 10000; count++)
        {
            dictA.Add(Guid.NewGuid(),"");
        }

        // Match by Key without matches.
        sw.Reset();
        sw.Start();
        matchFound = listB.Any(item => dictA.ContainsKey(item));
        sw.Stop();
        Console.WriteLine("Key Match {0}ms", sw.ElapsedMilliseconds);

这些给出了结果

        List Match 1095ms
        Key Match 1ms