繁体   English   中英

C#LINQ查找名称在列表中的位置

[英]C# LINQ find where name is in list

我有一个对象列表,我想按某个字段排序,然后找出什么“等级”或索引是某个名称。

例如,假设我有一个:

List<Location> Locations= new List<Location>();

我想按人气排序

var list = this.Locations.OrderBy(r => r.PopularityPct); 

现在,我想找出“西班牙”的索引是什么( 注意 :“西班牙”将是Name属性的查找,其中Name将是location对象的属性),因为此列表是按人气排序的。

最简单的方法是什么?

您可以像这样轻松获得所有名称和索引:

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;
}

我知道这很奇怪:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM