我有一个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
],
],
答案 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();