当前位置:  开发笔记 > 编程语言 > 正文

如何从List <T>中获取每个第n项?

如何解决《如何从List<T>中获取每个第n项?》经验,为你挑选了5个好方法。

我正在使用.NET 3.5,并希望能够n从列表中获取每个**项.我对使用lambda表达式还是LINQ实现它并不感到困扰.

编辑

看起来这个问题激起了很多争论(这是一件好事,对吧?).我学到的主要是,当你认为你知道每一种做某事的方式时(尽管这很简单),再想一想!



1> mqp..:
return list.Where((x, i) => i % nStep == 0);


需要注意的是:Linq/Lambda解决方案的性能远低于具有固定增量的简单循环.
不一定,通过延迟执行,它可以在foreach循环中使用,并且只在原始列表上循环一次.
@mquander:请注意,这实际上会给你第n - 1个元素.如果你想要实际的第n个元素(跳过第一个元素)那么你将不得不向i添加1.
是的,我想这有点取决于你所说的"第n",但你的解释可能更为常见.根据您的需要添加或减少i.

2> Michael Todd..:

我知道这是"老派",但为什么不使用带有步进= n的for循环?


@casperOne:我相信程序员发明了这个叫做子程序的东西来处理这个问题;)在一个真正的程序中,我可能会使用一个循环,尽管有一个聪明的LINQ版本,因为循环意味着你不必遍历每个元素(将索引增加N.)

3> MartinStettn..:

听起来好像

IEnumerator GetNth(List list, int n) {
  for (int i=0; i

会做的伎俩.我没有看到使用Linq或lambda表达式的必要性.

编辑:

做了

public static class MyListExtensions {
  public static IEnumerable GetNth(this List list, int n) {
    for (int i=0; i

你用LINQish的方式写作

from var element in MyList.GetNth(10) select element;

第二编辑:

为了使它更加LINQish

from var i in Range(0, ((myList.Length-1)/n)+1) select list[n*i];


我喜欢这种使用this [] getter而不是Where()方法的方法,它基本上迭代了IEnumerable的每个元素.如果你有一个IList/ICollection类型,这是更好的方法,恕我直言.

4> JaredPar..:

您可以使用Where过载将索引与元素一起传递

var everyFourth = list.Where((x,i) => i % 4 == 0);



5> Quintin Robi..:

对于循环

for(int i = 0; i < list.Count; i += n)
    //Nth Item..

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有