【问题标题】:C# List.Find() seems not working when list is huge当列表很大时,C# List.Find() 似乎不起作用
【发布时间】:2014-01-03 09:43:11
【问题描述】:

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

这是我的物品

struct reference
{
    public double GPST;
    public byte cls;
    public ushort fn;
    public int ret_num;
}

这是我的查询代码

 List<reference> ref_pts;

 List<reference> result = ref_pts.FindAll(delegate(reference obj) { return obj.GPST == pt.GPST; });

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

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

【问题讨论】:

  • 是的,是的。我编辑了这个问题,谢谢你提醒我。
  • 不,原因不是列表很大。该列表在处理该大小的数据时没有问题。一个原因可能是 thumbmunkeys 建议的双精度问题,另一个是您的代码中的其他地方可能存在问题,因此列表实际上不包含您要查找的项目。
  • 我尝试使用for循环找到该项目,并且可以通过这种方式找到该项目。我很困惑。

标签: c# .net comparison


【解决方案1】:

你不能像这样比较双精度,使用 epsilon 来比较:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}

EPSILON是一个很小的数字,详细请看herehere

【讨论】:

  • @SriramSakthivel 你确定吗? not doing very well 可以是任何东西
  • @thumbmunkeys 我希望 OP 从这句话中谈论性能问题not doing very well
  • @SriramSakthivel:OP 是在谈论“永远不返回任何东西”,而不是性能。
  • @PatrickHofman 很好,很抱歉造成混乱,顺便说一句,我撤回了我的反对票
猜你喜欢
  • 2013-07-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多