C# 从没有循环的列表中检索元素

C# 从没有循环的列表中检索元素,c#,list,C#,List,我想从我的列表中检索一个元素或其列表,而不使用for或foreach循环,因为我的列表非常大,我还需要对结果进行另一个循环,因此从算法复杂性的角度来看,在彼此内部使用两个循环不是一个好主意。如果可以从列表中获取一个元素而不使用循环,那么可以使用LINQ(first,firstOrdefault,Single,SingleOrdefault)可以从列表中为您提供一个元素的函数,如果您需要多次,也可以在转换的末尾使用where with ToList。所有这些函数都将lambda表达式作为参数。 另

我想从我的列表中检索一个元素或其列表,而不使用for或foreach循环,因为我的列表非常大,我还需要对结果进行另一个循环,因此从算法复杂性的角度来看,在彼此内部使用两个循环不是一个好主意。

如果可以从列表中获取一个元素而不使用循环,那么可以使用LINQ(first,firstOrdefault,Single,SingleOrdefault)可以从列表中为您提供一个元素的函数,如果您需要多次,也可以在转换的末尾使用where with ToList。所有这些函数都将lambda表达式作为参数。 另外,请查看这些链接以了解为什么我是对的:

只要你有一个大尺寸的收集,LINQ是正确的选择

您还可以查看此示例,了解为什么LINQ是处理大尺寸数组“400k elements+”的最佳选择:

结果如下:

Real run:
TestLINQ count: 499854
0:00:00:00.0170207
TestForeach count: 499854
0:00:00:00.0200297
TestFor count: 499854
0:00:00:00.0198944

如果我们使用更大的数组,LINQ、For和Foreach之间的差异将是显而易见的。

如果可以从列表中获取一个元素而不进行循环,则可以使用LINQ(first、firstOrdefault、Single、SingleOrdefault)可以从列表中为您提供一个元素的函数,如果您需要多次,也可以在转换的末尾使用where with ToList。所有这些函数都将lambda表达式作为参数。 另外,请查看这些链接以了解为什么我是对的:

只要你有一个大尺寸的收集,LINQ是正确的选择

您还可以查看此示例,了解为什么LINQ是处理大尺寸数组“400k elements+”的最佳选择:

结果如下:

Real run:
TestLINQ count: 499854
0:00:00:00.0170207
TestForeach count: 499854
0:00:00:00.0200297
TestFor count: 499854
0:00:00:00.0198944

如果我们使用更大的数组,LINQ、For和Foreach之间的差异是显而易见的。

答案取决于确定所需元素的平均值。事实是,如果您有要查找的元素的索引,列表将具有O(1)复杂度;否则它将始终具有O(n)复杂度(LINQ或not)

但是,如果需要提取集合中的多个元素,然后对它们使用循环,LINQ将使您能够轻松地使用一个循环(对集合中的所有元素):

如果您想找到比O(n)复杂度更小的元素,应该查看
HashSet
Dictionary


但是,您的问题不够精确,无法给出更具体的答案。

答案取决于确定所需元素的平均值。事实是,如果您有要查找的元素的索引,列表将具有O(1)复杂性;否则,它将始终具有O(n)复杂性(LINQ或not)

但是,如果需要提取集合中的多个元素,然后对它们使用循环,LINQ将使您能够轻松地使用一个循环(对集合中的所有元素):

如果您想找到比O(n)复杂度更小的元素,应该查看
HashSet
Dictionary



但是您的问题不够精确,无法给出更具体的答案。

如何确定元素?索引、条件?哈希表可能会对您有所帮助。事实上,我有一个对象列表,有时我需要属性上的条件,为了得到一个元素,我使用id。您可能不可能想要什么:您能否一个月只在列表中循环一次d同时找到您的项并进行结果计算?那么这是可能的。或者,您真的需要拥有该项才能进行循环吗?那么,这是不可能的,并且您被两个嵌套循环的性能所困扰。向我们展示您的“列表”声明!!!您如何确定元素?索引,条件?哈希表可能是h确实,我有一个对象列表,有时我需要一个属性的条件,并获得一个我使用id的元素。这可能不可能是你想要的:你能在列表中循环一次,同时找到你的项并进行结果计算吗?那么这是可能的。或者,你真的需要在循环之前拥有该项吗?那么,这是不可能的,并且您被两个嵌套循环的性能所困扰。向我们展示您的“列表”声明!!!Linq使用循环(内部)是的,但是它比普通循环花费的时间要少。试一下,计算执行时间来查看结果。我很确定LINQ比普通程序运行得快,你可以自己尝试,因为我做了不止一次,结果完全不同。链接程序比普通循环消耗的时间要少几秒钟LINQ比l慢哦,看。但在大多数情况下,这并不是不使用它的理由。我会说这些都是理论。实际情况完全不同。我在程序中使用了秒表,然后我使用了普通for和LINQ函数,所以使用LINQ可以少几秒钟。LINQ使用循环(内部)是的,但是它比普通循环花费的时间要少。试一下,计算执行时间来查看结果。我很确定LINQ比普通程序运行得快,你可以自己尝试,因为我做了不止一次,结果完全不同。链接程序比普通循环消耗的时间要少几秒钟LINQ比l慢哦,看。但在大多数情况下,这并不是不使用它的理由。我会说这些都是理论。事实完全不同。我在程序中使用了秒表,然后我使用了正常的for和LINQ函数,所以使用LINQ我少了几秒钟。