我有一個循環,其循環多達20檢查循環中的增量器是否在一定範圍內的最佳方法是什麼?
我使用C#4.0和LINQ(如有必要)。什麼是說
"if i > 3 && < 5"
但由於各種頻帶(例如3和5,6之間,和8等)的好方法,沒有負載,如果在循環語句?
感謝
我有一個循環,其循環多達20檢查循環中的增量器是否在一定範圍內的最佳方法是什麼?
我使用C#4.0和LINQ(如有必要)。什麼是說
"if i > 3 && < 5"
但由於各種頻帶(例如3和5,6之間,和8等)的好方法,沒有負載,如果在循環語句?
感謝
如果你只是想簡化的語法,你可以寫一個擴展方法:
public static bool IsBetween(this int num, int exclusiveLowerBound, int exclusiveUpperBound)
{
return num > exclusiveLowerBound && num < exclusiveUpperBound;
}
當然,這是值得商榷的,如果i.IsBetween(3, 5)
真的比你所提供的樣品清潔。
如果真的你正在處理「各種樂隊」,你可以使用高效的Interval Tree數據結構。如果性能是不是一個問題,你可以只寫一個簡單的類自己:
public class NumRange
{
public int ExclusiveLowerBound { get; private set; }
public int ExclusiveUpperBound { get; private set; }
public int Size
{
get
{
return ExclusiveUpperBound - ExclusiveLowerBound;
}
}
public NumRange(int boundary1, int boundary2)
{
ExclusiveLowerBound = Math.Min(boundary1, boundary2);
ExclusiveUpperBound = Math.Max(boundary1, boundary2);
}
public bool Contains(int num)
{
return num > ExclusiveLowerBound && num < ExclusiveUpperBound;
}
}
這將允許你寫這樣的代碼:
var rangeToComment = new Dictionary<NumRange, string>
{
{new NumRange(3,5), "The number 4."},
{new NumRange(0, 10),"Single digit natural numbers"},
{new NumRange(int.MinValue,int.MaxValue),"Integers"}
};
foreach (int number in Enumerable.Range(0, 100))
{
var tightestRange = rangeToComment.Where(kvp => kvp.Key.Contains(number))
.OrderBy(kvp => kvp.Key.Size)
.First();
Console.WriteLine("{0}: {1}", number, tightestRange.Value);
}
您可以使用一個開關:
switch(i) {
case 3:
case 4:
case 5:
// between 3 and 5
break;
case 6:
case 7:
case 8;
// between 6 and 8
break;
case 9:
case 10:
case 11:
// between 9 and 11
break;
}
你仍然需要檢查這些值,所以最好的選擇我看到好像是要檢查的功能。這使得if子句非常乾淨,但仍然提供了靈活性來測試任何範圍。
bool inBand(int value, int low, int high) {
return value > low && value < high;
}
「隱藏」你的魔法-數了一下,可能使代碼更清晰一點,你可以做這樣的事情。這一切都取決於你的需求。
//By naming the rangeX variables something meaningful you can make your code more readable(in my mind).
var range1 = new int[] { 1, 2, 3 };
var range2 = new int[] { 4, 5 };
var range3 = new int[] { 6 };
for(int i = 0; i < 20; i++)
{
if(range1.Contains(i))
{
//Do stuff
}
else if(range2.Contains(i))
{
//Do other stuff
}
//etc
}
你想只是一個檢查,或多個的?即你是在說「如果它在範圍2-3或範圍5-7或範圍4-5做X」,或者你在說「如果範圍2-3做X,如果在範圍5- 7做Y,如果在範圍4-5做Z「?後者是 – Stephen 2010-08-15 12:17:14
。因缺乏清晰度而變得不合時宜。 – dotnetdev 2010-08-15 12:26:34
除了這些特定於樂隊的操作之外,循環還會執行其他任何操作嗎?這幾乎聽起來像你陷入了案件的反模式。 – 2010-08-15 12:54:38