我在列表中有一个字符串列表.如何使用LINQ获取列表中最后一个字符串,该字符串在字符串的第二个位置具有字符"P".我想在使用LINQ的单个语句中执行此操作,而不是在传统循环中进行搜索.
例.该列表包含以下3个字符串:
Search a fox
APPLE
Going to school
Run Code Online (Sandbox Code Playgroud)
LINQ语句应返回2,这是列表中符合条件的第二个字符串.
var lastWithP = myList.Last(s => s.Length >= 2 && s[1] == 'P');
var lastIndex = myList.LastIndexOf(lastWithP);
Run Code Online (Sandbox Code Playgroud)
或者:
var lastIndex = myList.Select((s, i) => new { S = s, I = i })
.Last(p => p.S.Length >= 2 && p.S[1] == 'P').I;
Run Code Online (Sandbox Code Playgroud)
这两个都假设没有列表元素null,尽管它们确实检查了至少两个字符.
性能方面,基准测试是必需的,但我怀疑第一个可能更快List<string>,因为LastIndexOf()将通过引用进行比较.第二个会因为Select调用而进行更多的内存分配,但是价格昂贵IEnumerable<string>(注意并非所有的枚举都必须昂贵)只需要一个枚举.
此外,如果列表中没有元素,在第二个位置有"P",则会抛出异常.如果需要LastOrDefault,null可以使用测试.
| 归档时间: |
|
| 查看次数: |
2649 次 |
| 最近记录: |