检查 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 循环)更快,但您可以轻松地对其进行测试。如果真的要在这里赢性能,可能需要更好的数据结构。
我有一个 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 循环)更快,但您可以轻松地对其进行测试。如果真的要在这里赢性能,可能需要更好的数据结构。