我有一個有序集合DateTime
值。我想在特定的開始時間和結束時間之間檢索集合中的所有值。我應該用什麼樣的方式以最有效的方式來做到這一點?獲取有序集合中的範圍
1
A
回答
1
您可以使用List<T>
,但請保持訂購。使用BinarySearch方法在列表中找到您的開始DateTime
。請注意,它返回:
如果找到項目,則排序列表中項目的從零開始的索引;否則,是一個負數,它是大於項的下一個元素的索引的按位補數,或者如果沒有更大的元素,則爲Count的逐位補碼。
因此,如果該值爲負數,則需要應用按位補碼(~
運算符)來查找範圍內的第一個索引。然後,您可以使用相同的過程並減去1來查找範圍內的最後一個元素。
0
使用LINQ(因爲這是你的標籤之一),你可以做這樣的:
IEnumerable<DateTime> orderedDateTimes; // Your ordered DateTime collection
DateTime start; // The start date/time, inclusive
DateTime end; // The end date/time, inclusive
var range = orderedDateTimes
.SkipWhile(dt => dt < start)
.TakeWhile(dt => dt <= end);
這將需要O(n)的最壞的情況下,以獲得一定範圍內。但是,您可以將結果強制爲列表或數組,以便能夠高效地重用它:
DateTime[] rangeArray = range.ToArray();
// -or-
List<DateTime> rangeList = range.ToList();
相關問題
- 1. Java:獲取集合範圍內的值
- 2. 範圍集合
- 3. VBA中的範圍集合
- 4. 獲取序列的範圍
- 5. 獲取整個範圍內的集合的端點
- 6. SELECT在範圍集合中的值
- 7. 打印範圍子集合
- 8. 獲取號碼範圍交集
- 9. TFS - 獲取更改集範圍
- 10. 如何從PowerShell中的集合中提取範圍?
- 11. 可能從SortedMap獲取有序集合?
- 12. 返回從EntitySetController有序集合獲取
- 13. 獲取一個有序集合
- 14. Nifi GetDynamoDB - 獲取範圍的所有值
- 15. 在AngularJS應用程序中獲取所有範圍
- 16. 獲取範圍的舊值
- 17. Groovy的集合 - 作業範圍
- 18. 空的Excel範圍集合可能嗎?
- 19. 訪問從$範圍之外的集合
- 20. perl子程序獲取日期範圍
- 21. 從列範圍內的表中獲取結果集?
- 22. 在SpannableString中獲取應用範圍的範圍
- 23. 給定一個範圍,在Scala中獲取該範圍內的所有日期
- 24. 如何結合數組中的IP並獲取範圍?
- 25. 獲取java.lang包中所有類的集合(或集合)
- 26. Laravel獲取所有realated型號範圍
- 27. 獲取集合中的WPF
- 28. 獲取範圍中的唯一號碼
- 29. 獲取變量的中間範圍值
- 30. 獲取extjs中的日期範圍4
它不會採取任何事實上的優點,即集合已被排序。我不認爲LINQ是這個問題的好選擇。 – MarcinJuraszek 2013-03-07 11:31:14
@MarcinJuraszek:如果集合沒有排序,我的代碼將無法工作。所以它_does_利用這一點。但是,不能儘可能地擴展(二元搜索等)。但他添加了LINQ標籤,所以我回答。 – Virtlink 2013-03-07 11:32:54