C# LINQ 查找名称在列表中的位置
本文关键字:列表 位置 LINQ 查找 | 更新日期: 2023-09-27 17:55:41
我有一个对象列表,我想按某个字段排序,然后找出某个名称的"rank"或index。
例如,假设我有一个:
List<Location> Locations= new List<Location>();
我想按人气排序
var list = this.Locations.OrderBy(r => r.PopularityPct);
我现在想知道"西班牙"的索引是什么(注意:"西班牙"将是 Name 属性的查找,其中 Name 将是位置对象的属性),因为此列表是按受欢迎程度排序的。
最简单的方法是什么?
您可以像这样轻松获取所有名称和索引:
var list = this.Locations.OrderBy(r => r.PopularityPct)
.Select((value, index) => new { value, index });
然后,例如:
var spainIndex = list.Single(x => x.value.Name == "Spain").index;
或打印所有内容:
foreach (var pair in list)
{
Console.WriteLine("{0}: {1}", pair.index, pair.value.Name);
}
这是假设您想要排序后的排名。如果您希望索引位于初始列表中,则可以切换顺序:
var list = this.Locations.Select((value, index) => new { value, index });
.OrderBy(r => r.value.PopularityPct);
首先对位置进行排序,然后...
from index in Enumerable.Range(0, Locations.Count)
let r = Locations[index]
..WHERE CLAUSE
select index
您可以执行以下操作:
public static int FindIndexOf(IEnumerable<Location> items,string val)
{
int index = -1;
items.Where((x, i) => {
var ret = x.City == val;
if (ret)
index = i;
return ret;
}).ToList();
return index;
}
我知道这很奇怪:)