c# - C#从列表中获取值在一个范围内的索引
问题描述
假设我有List<float>
以下值:
{20, 60, 80, 85, 90, 120, 140}
我有一个数字,假设是“75”。我怎样才能找到我拥有的这个数字(75)> = 然后是索引的值和 < 然后是下一个索引的值的索引?简而言之,我想找到我的数字(75)在 60 到 80 之间的“范围内”,所以它返回给我的索引号为 1。
到目前为止,我使用了 Linq,但它只返回最接近的值。我想找到索引。
myList.OrderBy(x => Math.Abs(points - x)).First()
有没有一种有效的方法可以将此索引返回给我?我知道有可能使用 For 循环,但我相信如果我考虑到我可能不得不在几秒钟内调用它几次,那么循环可能会很重。(该列表将包含 ~99 个值)。
非常感谢你!我很感激任何帮助!
解决方案
我希望我明白你的意思。
以下应该可以帮助你
var list = new List<float>{20, 60, 80, 85, 90, 120, 140};
var numberToSearch = 70;
var result = list.Select((x,index)=> new
{
Index=index,
Value=x,
Diff = Math.Abs(x-numberToSearch)
})
.OrderBy(x=>x.Diff)
.First()
.Index;
Console.WriteLine($"Search Term {numberToSearch}, Index={result}");
或者(如果列表最初是排序的),你也可以这样做
var result = list.Select((x,index)=> new {number=x, index= index}).First(x=> x.number > numberToSearch).index - 1;
if(result == -1)
{
Console.WriteLine("Not Found");
}
else
Console.WriteLine($"Search Term {numberToSearch}, Index={result}");
}
输出为numberToSearch = 70
Search Term 70, Index=1
输出为numberToSearch = 87
Search Term 87, Index=3
推荐阅读
- reactjs - 使用 React Redux 从 f 中的集合中删除项目
- laravel - 在 laravel 5.7 中注册后自动登录
- python - 计算线性回归的斜率和截距误差
- c# - 具有 FromForm 绑定到 IFormFile 属性的 C# 集成测试控制器
- android - Android 活动不会从工具栏返回到主要活动
- python - 如何获得一个列表,它是许多列表的笛卡尔积
- python - 希望使用 argparse 设置全局默认参数
- java - 在 DataProvider 为单个测试方法运行具有不同数据的多个测试的情况下,在 TestNG/Maven 报告中获取测试方法名称
- c++ - 通过 QTextStream 反复读写 QBuffer
- java - 如何在unity3d中修复“JAVA_HOME环境引用目录”