แก้ไข: คำตอบใหม่ให้ ฉันเพิ่งเริ่มใช้ 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: การใช้รายการของ ints แบบสุ่มระหว่าง 1 ถึง 150
// 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 วินาที