是否有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