2016-10-31 59 views
-1

我有一个列表:查找产品慢

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<>中更快速地搜索?或者存在没有相同结果的列表的快捷方案?

+3

你能提供的列表的大小更多的细节?还有'c'代表什么?这些表演真的很奇怪..你还可以展示你如何测量它 –

+8

'sim = table [1];'需要3秒? o.O –

+3

你可以在循环中提供更多的代码吗? 你确定table [1]真的需要3秒吗?这只是一个内存列表的索引,应该是非常快的。 – ivanPfeff

回答

1

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

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

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

当你添加一个符号,你应该查找列表中,如果没有发现创建一个新

+0

是的这个结构工作得更快。我的程序现在工作3秒。谢谢。 –