检查 List<List<double>> 是否在第一个位置包含特定值

Check if List<List<double>> Contains Specific Value in first postition

我有一个 List<List<double>> items,其中每个内部列表包含一对双打,其中 [0] == PRICE[1] == QTY

我想检查 (TRUE/FALSE) 列表是否包含具有特定 PRICE 值的行。除了用 foreach 循环遍历整个列表,也许还有 LINQ 之外,有没有更快的方法来做到这一点?还是只检查第一个值的特殊类型的“.Contains()”方法?

"items": [
  [
     241.947,
     155.91626
  ],
  [
     241,
     981.1255
  ],
[
     240.744,
     21.1255
  ],
],

您可以使用 linq 来实现这一点而无需循环。 喜欢...

var itemlist = (From tbl in items where tbl[0] == QTY Select tbl).ToList();

您可以结合使用 Any 和 Contains Like 以下内容来执行此检查;

List<List<double>> items = new List<List<double>>();

items.Add(new List<double>(){12.5,3.4,4.5,56.7,11.3,10.7});
items.Add(new List<double>(){122.5,123.4,122.7,256.7,411.3,410.7});

double itemToCheck = 1222.7;

if(items.Any(x=>x.Contains(itemToCheck)))
    Console.WriteLine("Item Found");
else            
    Console.WriteLine("Item Not Found");    

工作示例here

假设你的意思是,(看到你的例子应该是这种情况)每个内部列表恰好包含两个值 - 第一个是价格,第二个是数量,你想要这样的东西:

  List<List<double>> items = new List<List<double>>();
  var result = items.Any(innerList => innerList[0] == yourValue);

如果有任何内部列表的第一个值设置为您的价格,则查询 returns 为真。

编辑 1:

因为您使用的是双打,您甚至可能想要检查具有小公差的值:

  List<List<double>> items = new List<List<double>>();
  var result = items.Any(innerList => Math.Abs(innerList[0] - yourValue) < someReallySmallTolerance);

编辑2: 关于您的性能问题,linq 查询不太可能比简单的 foreach(或 for 循环)更快,但您可以轻松地对其进行测试。如果真的要在这里赢性能,可能需要更好的数据结构。