假設我有兩點,int x1, x2
,其中x1
可以更大,更小或等於x2
。我想要在這兩個點之間生成所有整數(從x1
開始並以x2
結尾),或者如果兩個點相等,則只需要x1
。有沒有什麼優雅的方式來產生這些值IEnumerable<int>
?更好的Enumerable.Range升序和降序範圍?
2
A
回答
8
你可以使用這個迭代器塊:
IEnumerable<int> CreateRange(int x1, int x2) {
var increment = x2 > x1 ? 1 : -1;
for (var i = x1; i != x2; i += increment)
yield return i;
yield return x2;
}
它的高效和創建範圍是一樣乾淨使用Enumerable.Range
:
CreateRange(10, 5).Select(...)
+0
我想保留訂單 – user2341923
+0
什麼命令? @ user2341923 – dotctor
+0
以'x1'開頭並以'x2'結尾,即使'x1> x2' – user2341923
3
你可以做這樣的事情:
//normal order works
int x1 = 5;
int x2 = 10;
int len = Math.Abs(x2 - x1) + 1;
var range = x1 < x2 ? Enumerable.Range(x1, len) : Enumerable.Range(x2, len).Reverse();
//reverse order works (the same code for range)
x1 = 10;
x2 = 5;
len = Math.Abs(x2 - x1) + 1;
range = x1 < x2 ? Enumerable.Range(x1, len) : Enumerable.Range(x2, len).Reverse();
4
如果你想堅持單一的LINQ語句 -
Enumerable.Range(0, Math.Abs(x2 - x1) + 1).Select(i => x1 + i * Math.Sign(x2 - x1))
相關問題
- 1. 升序和降序的Java
- 2. 升序和降序排列
- 3. MYSQL按升序和降序排序
- 4. XSLT排序:升序和降序
- 5. 排序gridview列升序和降序
- 6. XQuery按升序和降序排序
- 7. django order_by查詢集,升序和降序
- 8. SQL按月升序和月份降序?
- 9. unicode圖標升序和降序
- 10. 以升序和降序打印鏈表
- 11. 訂單整數在升序和降序
- 12. 根據列值升序和降序
- 13. 升序和降序在Python 3
- 14. 如何升序降序?
- 15. mongodb降序升序索引
- 16. data.frame(NOT升序/降序)
- 17. 如何通過降序/升序值和升序/降序鍵對perl中的散列引用進行排序?
- 18. 獲得一個降序範圍序列中的紅寶石
- 19. 使用Array.Sort()和Array.Reverse()排序陣列升序和降序
- 20. 更好的理解範圍
- 21. 改變升序排序降序
- 22. golang排序切片升序或降序
- 23. Modx:getResources - 按ID升序/降序排序?
- 24. 使用isotope.js升序和降序之間的排序切換
- 25. 冒泡排序按升序在Java中的矩陣和降序
- 26. 獲取並設置DataGridView的排序(列和升序/降序)
- 27. 如何保持GridView的排序狀態? (升序和降序)
- 28. 排序方式是升序和降序的情況
- 29. 如何驗證casperjs中的排序(升序和降序)功能
- 30. Django反向的升序/降序排列
沒有內置。聚合可以做到這一點,但它會矯枉過正。製作你自己的,它不應該超過5行。 –