簡體   English   中英

如何使用可變步數獲得可枚舉范圍

[英]How to get enumerable range with a variable step count

我正在嘗試獲取一個列表,范圍從具有可變步數的最小值和最大值。

例如:如果我設置最小值為 10,000,最大值為 150,000,步數為 20,000。 我應該能夠得到列表為 [10000,30000,50000,70000,...,150000]。

類似地,如果步數設置為 15,000 - 我應該得到的列表為 [10000,25000,40000,...,145000]

 int min = 10000;
 int max = 150000;
 int step = 20000;

 var result = Enumerable.Range( min, max).Where(i => i<= max && (i % step == 0));
 foreach (int num in result) { Console.WriteLine(num); } // output: [20000,40000,60000,80000,100000,120000,140000]

由於我使用模數運算符來等於零值,因此它跳過了范圍中的第一個值,並給出了上述結果而不是 [10000,30000,..,150000]。 由於我對 C# 編程非常陌生,任何人都可以用上面的代碼糾正我以獲得所需的輸出。

PS:我已經提到了這個線程如何使用 Enumerable.Range 獲取備用數字? 但無法找到答案。

創建自定義迭代器可能比重用現有的Enumerable.Range方法更容易。

public static IEnumerable<int> Range(int min, int max, int step)
{
    for (int i = min; i <= max; i = checked(i + step)) yield return i;
}

您只需要修改 Linq 語句中的 where 條件:

var result = Enumerable.Range(min, max - min + 1).Where(i => (i - min) % step == 0);

當等於i vs step的模數是否為 0 時,您忘記減去起始值min 通過減去min ,您可以抵消模計算以與i偏移min的值進行比較,而不是使用i

步長為 20,000 時的輸出:

10000
30000
50000
70000
90000
110000
130000
150000

步長為 15,000 時的輸出:

10000
25000
40000
55000
70000
85000
100000
115000
130000
145000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM