是否有LINQ的,做同样的作为ElementAt
除了它返回一个带有IEnumerable<T>
单个元件,而不是实际的元件的方法?是不是有一些我可以使用的SelectRange(startIndex, endIndex)
方法,只需传递两次相同的索引?LINQ的可枚举<T> .ElementAt =>的IEnumerable <T>
回答
最简单的方法是使用
source.Skip(count).Take(1)
或更一般
source.Skip(startIndex).Take(endIndex - startIndex)
(假定一个包容startIndex
但独家endIndex
)。
啊..它叫做GetRange(index, count)
。我的错。只是觉得:)
不,这是'List'的一部分,而不是'IEnumerable
@Mark。仅适用于'List
@Jon。打我吧 – jordanbtucker 2010-11-09 06:23:50
编写扩展方法
public static IEnumerable<T> ToMyEnumerable<T>(this T input)
{
var enumerbale = new[] { input };
return enumerbale;
}
source.First(p => p.ID == value).ToMyEnumerable<T>()
这是O(n)
乔恩斯基特的技术是做一个伟大的方式。但是,我会建议可能的优化,该优化基于Enumerable.Skip
中的实现细节:它目前似乎不利用IList
或IList<T>
上的索引器。幸运的是,Enumerable.ElementAt
呢。
所以一个替代的解决方案是:
var itemAsSequence = new[] { source.ElementAt(index) };
请注意,这会急切地执行。如果你想类似乔恩的答案延迟执行语义,你可以这样做:
public static IEnumerable<T> ElementAtAsSequence<T>
(this IEnumerable<T> source, int index)
{
// if you need argument validation, you need another level of indirection
yield return source.ElementAt(index);
}
...
var itemAsSequence = source.ElementAtAsSequence(index);
我要指出的是,因为这依赖于一个实现细节,在LINQ未来改进的对象能做出这样的优化冗余。
- 1. IEnumerable的<IEnumerable的<T>>到的IEnumerable <T>使用LINQ
- 2. 的Linq:转换IEnumerable的<Point>到IEnumerable <float>
- 3. 可枚举为什么不自IEnumerable <T>
- 4. 语法<(中<(<'TKEY的,TValue>中)>)> .. ::枚举
- 5. Mapper.Map <任务<IEnumerable的<Address>>,任务<IEnumerable的<AddressView>>()
- 6. 的EntitySet <IEnumerable的<T>>到IEnumerable的<T>
- 7. IEnumerable的<T>到的IDictionary <U,IEnumerable的<T>>
- 8. 铸造Linq IEnumerable <Datarow>
- 9. Linq返回IEnumerable <T>
- 10. LINQ to IEnumerable <MyObj>
- 11. 如何创建无法枚举多个枚举的IEnumerable <T>?
- 12. 转换枚举的IEnumerable <SelectListItem>问题
- 13. 选择自IEnumerable <T>到IEnumerable的<Quantity<T>>
- 14. 枚举大小<String>
- 15. 枚举之间的区别<?扩展ZipEntry>和枚举<ZipEntry>?
- 16. 类型<sometype>不可枚举
- 17. 如何将IEnumerable <IEnumerable <IGrouping <int,string> >>转换为IEnumerable <IEnumerable <string>>
- 18. 分组IEnumerable <IEnumerable <int>>
- 19. 从IEnumerable <IEnumerable <T>>
- 20. 铸造IEnumerable <Derived> IEnumerable <BaseClass>
- 21. IEnumerable <IEnumerable <T>> to string [] []
- 22. 部队更新TGT
- 23. IEnumerable <>到IList <>
- 24. IEnumerable的<dynamic> LINQ表达式
- 25. 语法LINQ的IEnumerable <string>
- 26. 是产量突破等同于从方法返回可枚举<T> .Empty返回的IEnumerable <T>
- 27. 你如何模拟IEnumerable <T> ElementAt()使用NSubstitute?
- 28. 为什么不从枚举延伸<E延伸枚举<E>>
- 29. 如何将List <IEnumerable <ProductViewModel >>转换为<IEnumerable <ProductViewModel >>?
- 30. 枚举System.Collections.Generic.Dictionary中的键<string,string>
如果'source'是一个'List','Skip(count)'是'O(1)'? – mpen 2010-11-09 06:32:11
@Mark:不幸的是,我不相信Skip会为此优化,不会。一个洞的位,真的:( – 2010-11-09 07:13:14