是否有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. 從可枚舉<int>
- 3. 的Linq:轉換IEnumerable的<Point>到IEnumerable <float>
- 4. 轉換枚舉<String>來枚舉<object>
- 5. 可枚舉爲什麼不自IEnumerable <T>
- 6. 語法<(中<(<'TKEY的,TValue>中)>)> .. ::枚舉
- 7. 將IEnumerable <T>與IEnumerable比較IEnumerable <IEnumerable <T>>
- 8. Mapper.Map <任務<IEnumerable的<Address>>,任務<IEnumerable的<AddressView>>()
- 9. 的EntitySet <IEnumerable的<T>>到IEnumerable的<T>
- 10. IEnumerable的<T>到的IDictionary <U,IEnumerable的<T>>
- 11. Java:從枚舉枚舉<String>
- 12. 枚舉<>枚舉差異
- 13. Linq返回IEnumerable <T>
- 14. LINQ to IEnumerable <MyObj>
- 15. 鑄造Linq IEnumerable <Datarow>
- 16. IEnumerable <T> vs IReadOnlyList <T>
- 17. 如何創建無法枚舉多個枚舉的IEnumerable <T>?
- 18. LINQ的 - 無法隱式轉換類型 '的IEnumerable <IEnumerable的<.XElement>>' 到 'IEnumerable的<.XElement>'
- 19. LINQ:從另一個IEnumerable <T>創建IEnumerable <T>?
- 20. 如何枚舉轉換的IEnumerable <SelectListItem>
- 21. 轉換枚舉的IEnumerable <SelectListItem>問題
- 22. IEnumerable <T> cnt枚舉或不兼容,因爲seq <T>
- 23. 選擇自IEnumerable <T>到IEnumerable的<Quantity<T>>
- 24. 枚舉大小<String>
- 25. 類型<sometype>不可枚舉
- 26. 枚舉之間的區別<?擴展ZipEntry>和枚舉<ZipEntry>?
- 27. 如何將IEnumerable <IEnumerable <IGrouping <int,string> >>轉換爲IEnumerable <IEnumerable <string>>
- 28. 鑄造IEnumerable <Derived> IEnumerable <BaseClass>
- 29. 從IEnumerable <IEnumerable <T>>
- 30. 分組IEnumerable <IEnumerable <int>>
如果'source'是一個'List','Skip(count)'是'O(1)'? – mpen 2010-11-09 06:32:11
@Mark:不幸的是,我不相信Skip會爲此優化,不會。一個洞的位,真的:( – 2010-11-09 07:13:14