问题描述
在.NET/C#应用程序开发中,当前有一个泛型集合List<T>
,如何使用LINQ查询这个集合List<T>中索引位置在N的倍数的所有元素?
方案一
var result = list.Where((x, i) => i % nStep == 0);
方案二
使用yield return
,而不使用LINQ
或者Lambda
表达式,如下:
IEnumerator<T> GetNth<T>(List<T> list, int n) {
for (int i=0; i<list.Count; i+=n)
yield return list[i]
}
当然,我们也可以把它改写成静态扩展方法,如下:
public static class MyListExtensions {
public static IEnumerable<T> GetNth<T>(this List<T> list, int n) {
for (int i=0; i<list.Count; i+=n)
yield return list[i];
}
}
如果在LINQ
语句中使用:
from var element in MyList.GetNth(10) select element;
或者使用LINQ
的方式实现,如下:
from var i in Range(0, ((myList.Length-1)/n)+1) select list[n*i];
方案三
写一个静态扩展方法,如下:
public static class LinqExtensions
{
public static IEnumerable<T> GetNth<T>(this IEnumerable<T> list, int n)
{
if (n < 0)
throw new ArgumentOutOfRangeException("n");
if (n > 0)
{
int c = 0;
foreach (var e in list)
{
if (c % n == 0)
yield return e;
c++;
}
}
}
public static IEnumerable<T> GetNth<T>(this IList<T> list, int n)
{
if (n < 0)
throw new ArgumentOutOfRangeException("n");
if (n > 0)
for (int c = 0; c < list.Count; c += n)
yield return list[c];
}
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册