EDIT: Yeni Yanıt sağlandı. Bu sorunun ilk cevabını yazdığımda C # kullanmaya başladım ve artık "çözümümün" naif ve verimsiz olduğunu anlıyorum.
Orijinal cevabım: Daha basit bir versiyonla giderdim:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
En iyi yol
Daha verimli başka bir çözüm görmediğim için (en azından testlerime göre), başka bir çözüm vereceğim.
Negatif aralıklarla da çalışan yeni ve daha iyi bir yol :
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
Bu, hem pozitif hem de negatif aralıklar ve varsayılan olarak bir dizi aralıkla kullanılabilir
1. 100 (dahil) ve kullanımları x
kontrol etmek için sayı olarak bunu min
ve ile tanımlanan isteğe bağlı bir aralık izler max
.
İyi Önlemler İçin Örnekler Ekleme
Örnek 1:
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
Console.WriteLine(inRange(25));
Console.WriteLine(inRange(1));
Console.WriteLine(inRange(100));
Console.WriteLine(inRange(25, 30, 150));
Console.WriteLine(inRange(-25, -50, 0));
İadeler:
True
True
True
False
True
Örnek 2: 1 ile 150 arasında rastgele giriş listesinin kullanılması
// Returns true if x is in range [min..max], else false
bool inRange(int x, int min=1, int max=100) => ((x - max)*(x - min) <= 0);
// Generate 100000 ints between 1 and 150
var intsToCheck = new List<int>();
var randGen = new Random();
for(int i = 0; i < 100000; ++i){
intsToCheck.Add(randGen.Next(150) + 1);
}
var counter = 0;
foreach(int n in intsToCheck) {
if(inRange(n)) ++counter;
}
Console.WriteLine("{0} ints found in range 1..100", counter);
İadeler:
66660 ints found in range 1..100
Yürütme Süresi: 0,016 saniye