根据另一个列表的索引获取列表项

时间:2018-03-05 09:28:36

标签: c# arraylist

我有一个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表达式获取结果,但我不确定这是否也是正确的方法。

什么是最好或最有效的解决方案?

3 个答案:

答案 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的尺寸大于listlist3的尺寸,那么您可能会获得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 :-)
                }

            }
        }