用于优化

Dan*_*inu 2 c# linq optimization time-complexity

我正在尝试优化此代码:

   foreach (string id in ids)
   {
     MyClass x = myDictionary[id];
     foreach (var map in Maps)
     {
       if ( x.id == map.SourceId || x.id == map.DestionationId)
       {
           //add id to a hashset
       }
     }
   }
Run Code Online (Sandbox Code Playgroud)

如果ids.count为1600且Maps.Count为300 000,则需要大约10分钟才能处理.

我试过LINQ,但结果不是很好:

   var allIds = Maps.select(map => map.SourceId).Union(Maps.select(map => map.DestinationID)).Distinct();
   var toAdd = from id in Ids
               join mapId in AllIds on id equals mapid
               select id;
  //create hashset based on  toAdd collection.
Run Code Online (Sandbox Code Playgroud)

任何人都可以指出我更好的解决方案,如果可能解释为什么linq在这种情况下不是更快?

谢谢

Ale*_*kov 5

您有O(countIds*countMaps)的复杂性,如果您将所有地图放入由源和目标索引的2个词典中,您将获得O(countIds + countMaps).