C#从列表中返回int,并创建一个元组列表,其中包含每个int和每个int在第一个列表中的索引

C#从列表中返回int,并创建一个元组列表,其中包含每个int和每个int在第一个列表中的索引,c#,list,indexing,return,C#,List,Indexing,Return,我有一个int列表,我用FindAll查找列表中的项目,并在另一个列表中返回结果。由于第二个列表具有较少的元素,因此元素的索引可能不同于第一个列表的索引。因此,我希望有一个简单而快速的系统,将FindAll的结果与第一个列表中的索引联系起来。 我认为一个具有两个int的元组列表是理想的,因为元组的第一个int将是第二个列表的每个int,而元组的第二个int将是第一个列表中第二个列表的每个项的索引。我希望元组是原始元组(而不是ValueTuple) list1=newlist(){1,2,3,4,

我有一个int列表,我用FindAll查找列表中的项目,并在另一个列表中返回结果。由于第二个列表具有较少的元素,因此元素的索引可能不同于第一个列表的索引。因此,我希望有一个简单而快速的系统,将FindAll的结果与第一个列表中的索引联系起来。 我认为一个具有两个int的元组列表是理想的,因为元组的第一个int将是第二个列表的每个int,而元组的第二个int将是第一个列表中第二个列表的每个项的索引。我希望元组是原始元组(而不是ValueTuple)

list1=newlist(){1,2,3,4,5,6,7,8};
List list2=新列表();
List LIST2索引=新列表();
list2=list1.FindAll(x=>x>3&&x<7);//返回4 5 6
/*
现在我想创建元组列表,以便
返回:
(4, 3)  
(5, 4)
(6, 5)
第一个int是列表2的第一项
第二个int是它在列表1中的索引
如何快速创建这个元组列表?
*/

希望我正确理解了您的要求

list2 = list1.FindAll(x => x > 3 && x < 7); 
list2index = list1.Select((x,index)=> Tuple.Create(x,index)).ToList();
任何一种情况下的输出都是

(4, 3)  
(5, 4)
(6, 5)

我建议您使用for循环而不是linq来提高性能:

    for (int i = 0; i < list1.Count; i++)
    {
        int x = list1[i];
        if (x > 3 && x < 7)
            list2index.Add(new Tuple<int, int>(x,i));
    }
for(int i=0;i3&&x<7)
添加(新元组(x,i));
}

非常感谢。第二段代码正是我需要的@Roblogic很乐意提供帮助,如果这有助于您解决问题,请将其标记为答案。我该怎么做?这足够公平,可以展示不同的方法。然而,
for loop而不是linq for performance
我还不能确信这会更快,特别是因为您还没有在创建时设置列表大小。你有什么理由认为这会更快吗?
(4, 3)  
(5, 4)
(6, 5)
    for (int i = 0; i < list1.Count; i++)
    {
        int x = list1[i];
        if (x > 3 && x < 7)
            list2index.Add(new Tuple<int, int>(x,i));
    }