我有如下數字串列,我應該檢查一個條件以獲得最合適的匹配。
List<int> numbers= new List<int>();
numbers.Add(1000);
numbers.Add(3000);
numbers.Add(5500);
numbers.Add(7000);
如果我發送一個值來檢查它應該像下面的例子一樣檢查
場景1:如果我發送一個小于或等于1000的值來檢查,它應該回傳1000
場景 2:如果我發送一個 1001 - 3000 之間的值來檢查,它應該回傳 3000
場景 3:如果我發送一個 3001 - 5500 之間的值來檢查,它應該回傳 5500
場景 4:如果我發送一個 5501 - 7000 之間的值來檢查,它應該回傳 7000
場景 5:如果我發送一個大于 7000 的值來檢查,它應該什么都不回傳。
我可以用 Linq 做到這一點嗎?或者最有效的方法是什么?
更新: maxCheckPoint 中的數字是動態的,它可以是任何值。所以我們不能硬編碼和檢查
uj5u.com熱心網友回復:
你可以用 LINQ 做到這一點:
int input = 1000;
int? result = numbers
.OrderBy(n => n) // get the numbers in ascending order
.SkipWhile(n => n < input) // skip until the remaining set >= input
.Cast<int?>() // cast to nullable int
.FirstOrDefault(); // take the first or default entry (if no items remain, it will be null)
uj5u.com熱心網友回復:
好吧,為時已晚,我的解決方案遠非完美,但是:
int number = 400; //imput number
int closest = numbers.Aggregate((x, y) => Math.Abs(x - number) < Math.Abs(y - number) ? x : y); // searching the closer one
int compare;
try{
if (numbers.IndexOf(closest) != 0)
{
compare = Math.Max(closest, numbers[numbers.IndexOf(closest) 1]); // if it's not 0th and last
}
else
{ compare = closest; // if closest with index 0}
}// check which closest number is bigger
catch{
compare = closest; // if closest is last
}
Console.WriteLine(compare);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/380048.html
上一篇:如何回傳日期或錯誤?C#.Net
