在列表中查找项目很慢

时间:2016-10-31 16:26:17

标签: c# list

我有一个清单:

List<symbol> table = new List<symbol>();

我的班级符号有这样的结构:

public class symbol
{
  public byte c;
  public ulong low;
  public ulong high;
  public ulong freq;
}

当我在列表中搜索循环右边符号时,这需要花费太多时间: 仅举例:

sim = table.FirstOrDefault(x => x.c == b); //26 sec
sim = table.Where(i => i.c== b).FirstOrDefault(); //20 sec
sim = table.Find(x => x.c == b); //10 sec
sim = table[1]; //3 sec

这是我所有程序的时间,我只改变这一行。 我的列表大小约为2-256但我搜索大约100mil。 我希望在我的例子中搜索速度要快10秒。 如何在list<>中更快地搜索?或者存在快速好的解决方案,没有相同结果的列表?

1 个答案:

答案 0 :(得分:1)

列表不是为高效搜索而设计的。如果速度很重要,那么你需要一个更好的数据结构。

如果你需要找到字节值为c = x的所有符号,那么我会得到符号列表的字典。

var symbols = new Dictionary<byte, List<Symbol>>();

添加符号时,您应该查找列表,如果没有找到则创建一个新符号