在 2 个集合中并行搜索

Parallel search in 2 collection

所以,我有 2 个集合(第一个 - 所有符号,第二个 - 搜索)

IEnumerable<MarketSymbol> metadata; // 1
string [] symbols;                  // 2

例如, class MarketSymbol { string MarketSymbol {get;set;} }

我想在 metadata 中找到所有相同的 symbols 属性 MarketSymbol{get;set;}

但我只需要 1 次就可以找到遍历 metadata 的所有符号。

结果必须是

return MarketSymbol[] || IEnumerable<MarketSymbol> ... || add result to List<MarketSymbol> ...

建议:使用PLINQ

  1. 将符号数组放入 HashSet
  2. 创建一个包含结果的新结果集合
  3. 开始遍历元数据集合,如果当前项包含在HashSet中,则将其添加到结果集合中。

这样你将只遍历元数据一次。

已编辑 添加了秒表,以便您可以查看是否真的值得根据您的列表大小使用并行。

IEnumerable<MarketSymbol> metadata = new List<MarketSymbol> {
                        new MarketSymbol{  _MarketSymbol = "test3"  },
                        new MarketSymbol{ _MarketSymbol = "test2" }
                    };
            string[] symbols = new string[] { "test", "test2", "test3" };
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            var list = metadata.Where(x => symbols.Contains(x._MarketSymbol)).AsEnumerable().ToList();
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed);

            stopwatch.Start();
            var list2 = symbols.Intersect(metadata.Select(x => x._MarketSymbol)).ToList();
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed);

            stopwatch.Start();
            var list3 = symbols.AsParallel().Intersect(metadata.Select(x => x._MarketSymbol).AsParallel()).ToList();
            stopwatch.Stop();
            Console.WriteLine(stopwatch.Elapsed);
            Console.ReadKey();

结果列表,list2 和 list3:test3,test2