检查List <list <double>&gt;在第一次发帖中包含特定值

时间:2017-05-10 04:08:54

标签: c# list nested contains

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

如果列表包含具有特定PRICE值的行,我想检查(TRUE/FALSE)。有没有更快的方法来做到这一点,除了使用foreach循环整个列表,可能还有LINQ?或者特殊类型的&#39; .Contains()&#39;只检查第一个值的方法?

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

3 个答案:

答案 0 :(得分:1)

您可以使用Any和Contains的组合,如下所示执行此检查;

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

答案 1 :(得分:1)

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

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

如果有任何内部列表将其第一个值设置为您的价格,则查询返回true。

EDIT1:

因为您正在使用双打,所以您甚至可能希望以较小的容差检查值:

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

EDIT2: 关于你的性能问题,linq查询不可能比简单的foreach(或for循环)更快,但你可以轻松地测试它。如果你真的必须在这里赢得表现,你可能需要一个更好的数据结构。

答案 2 :(得分:0)

你可以使用linq来实现这一点而不需要循环。 喜欢......

  

var itemlist =(来自tbl [0] == QTY Select项目中的tbl   TBL).ToList();