我有一个SELECT n.contact_id, c.email, c.numero, c.code_postal, SUM(n.nbr_click), SUM(n.nbr_ouverture),
(
SUM(n.nbr_click) * 2
)
+
(
SUM(n.nbr_ouverture) * 3
)
as total FROM notitia n LEFT JOIN contact c ON c.id = n.contact_id LIMIT 5
,有三个嵌套列表。现在我需要检查List<List<string>>
是否等于某个字符串,如果是,请检查List[1]
中此索引处的值是否有另一个字符串。如果两个条件都返回true,那么我需要获得该特定索引并获得List[2]
例如:
List[0].
这种方法在性能方面似乎不是很有效,特别是如果嵌套列表包含~9000项。
我首先尝试通过lambda表达式获取结果,但我不确定这是否也是正确的方法。
什么是最好或最有效的解决方案?
答案 0 :(得分:1)
ElementAt
。 我相信ElementAt
遍历List以获取第i个元素 使用IndexOf
循环提供的索引消除对for
的使用我相信IndexOf
遍历List以查找匹配元素。
var list = Titles[0];
var list2 = Titles[1];
var list3 = Titles[2];
for (int i = 0 ; i < list2.Count; ++ i)
{
var item = list2[i];
if (item.Contains("Dt."))
{
var value = list3[i];
if (value.Contains("25.04.2017"))
{
var newList = list[i];
}
}
}
请注意,如果list2
的尺寸大于list
或list3
的尺寸,那么您可能会获得IndexOutOfRangeException
答案 1 :(得分:0)
Lambda等效代码:
if(list2.Any(item => item.Contains("Dt.")))
{
int idx = list2.IndexOf("Dt.");
if(list3.ElementAt(idx).Contains("25.04.2017"))
{
var newList = list.ElementAt(idx);
}
}
答案 2 :(得分:0)
for (int i = 0; i < list2.Count; ++i)
{
var item = list2[i];
if (item.Contains("Dt."))
{
var value = list3[i];
if (value.Contains("25.04.2017"))
{
var newList = list[i];
break; // Break the loop :-)
}
}
}