我有一个清单:
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<>
中更快地搜索?或者存在快速好的解决方案,没有相同结果的列表?
答案 0 :(得分:1)
列表不是为高效搜索而设计的。如果速度很重要,那么你需要一个更好的数据结构。
如果你需要找到字节值为c = x的所有符号,那么我会得到符号列表的字典。
var symbols = new Dictionary<byte, List<Symbol>>();
添加符号时,您应该查找列表,如果没有找到则创建一个新符号