当列表很大时,C#List.Find()似乎不起作用

高崇軒*_*高崇軒 3 .net c# comparison

我有一个巨大的列表,其中有1000万个项目,我试图在列表中找到一个特定的值.

这是我的项目

struct reference
{
    public double GPST;
    public byte cls;
    public ushort fn;
    public int ret_num;
}
Run Code Online (Sandbox Code Playgroud)

这是我的查询代码

 List<reference> ref_pts;

 List<reference> result = ref_pts.FindAll(delegate(reference obj) { return obj.GPST == pt.GPST; });
Run Code Online (Sandbox Code Playgroud)

其中pt.GPST是我想在List中找到的值

是因为尺寸太大,Find方法不起作用(总是什么都不返回)?

thu*_*eys 8

你不能比较双打这样的平等,使用epsilon来比较:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)

EPSILON是一个非常小的数字,详情请参见此处此处