संपादित करें: नया उत्तर प्रदान किया गया। मैं अभी C # का उपयोग करना शुरू कर रहा था, जब मैंने इस प्रश्न का पहला उत्तर लिखा था, और इस दृष्टि से मुझे अब पता चला कि मेरा "समाधान" भोला और अक्षम था।
मेरा मूल उत्तर: मैं अधिक सरल संस्करण के साथ जाऊंगा:
if(Enumerable.Range(1,100).Contains(intInQuestion)) { ...DoStuff; }
एक बेहतर तरीका
जैसा कि मैंने कोई अन्य समाधान नहीं देखा है जो अधिक कुशल है (कम से कम मेरे परीक्षणों के अनुसार), मैं इसे एक और जाने दूंगा।
नया और बेहतर तरीका जो नकारात्मक सीमाओं के साथ भी काम करता है :
// 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);
इसका उपयोग सकारात्मक और नकारात्मक दोनों श्रेणियों के साथ किया जा सकता है और कई प्रकार की चूक हो सकती हैं
1..100 (समावेशी) और x
एक वैकल्पिक श्रेणी द्वारा जाँच करने के लिए संख्या के रूप में उपयोग करता है min
और द्वारा परिभाषित max
।
अच्छे उपाय के लिए उदाहरण जोड़ना
उदाहरण 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));
यह दिखाता है:
True
True
True
False
True
उदाहरण 2: 1 और 150 के बीच यादृच्छिक ints की सूची का उपयोग करना
// 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);
यह दिखाता है:
66660 ints found in range 1..100
निष्पादन समय: 0.016 सेकंड (s)