从 int 列表中获取最大最接近的数字
Get maximum closest number from int list
我有如下号码列表,我应该检查条件以获得最合适的匹配。
List<int> numbers= new List<int>();
numbers.Add(1000);
numbers.Add(3000);
numbers.Add(5500);
numbers.Add(7000);
如果我发送一个值来检查它应该像下面的例子那样检查
场景一:
如果我发送一个小于或等于 1000 的值来检查,它应该 return 1000
场景二:
如果我发送一个 1001 - 3000 之间的值来检查,它应该 return 3000
场景 3:
如果我发送一个 3001 - 5500 之间的值来检查,它应该 return 5500
场景 4:
如果我发送一个 5501 - 7000 之间的值来检查,它应该 return 7000
场景 5:
如果我发送一个超过 7000 的值来检查,它应该 return 没有。
我可以用 Linq 做到这一点吗?或者最有效的方法是什么?
更新:maxCheckPoint中的数字是动态的,可以是任意值。所以我们不能硬编码和检查
您可以使用 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)
好吧,为时已晚,我的解决方案远非完美,但是:
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);
我有如下号码列表,我应该检查条件以获得最合适的匹配。
List<int> numbers= new List<int>();
numbers.Add(1000);
numbers.Add(3000);
numbers.Add(5500);
numbers.Add(7000);
如果我发送一个值来检查它应该像下面的例子那样检查
场景一: 如果我发送一个小于或等于 1000 的值来检查,它应该 return 1000
场景二: 如果我发送一个 1001 - 3000 之间的值来检查,它应该 return 3000
场景 3: 如果我发送一个 3001 - 5500 之间的值来检查,它应该 return 5500
场景 4: 如果我发送一个 5501 - 7000 之间的值来检查,它应该 return 7000
场景 5: 如果我发送一个超过 7000 的值来检查,它应该 return 没有。
我可以用 Linq 做到这一点吗?或者最有效的方法是什么?
更新:maxCheckPoint中的数字是动态的,可以是任意值。所以我们不能硬编码和检查
您可以使用 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)
好吧,为时已晚,我的解决方案远非完美,但是:
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);