首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >.NET 9 —LINQ — 新的索引方法

.NET 9 —LINQ — 新的索引方法

作者头像
郑子铭
发布2025-02-18 13:51:05
发布2025-02-18 13:51:05
15900
代码可运行
举报
运行总次数:0
代码可运行

在.NET 9中,引入了新的LINQ方法Index(即Index<TSource>(IEnumerable<TSource>))。借助这个方法,你可以轻松提取可枚举对象的隐式索引。

在之前的一篇文章中,我展示了.NET 9中新增的三个LINQ方法:CountByAggregateByIndex。在本文中,我想重点介绍Index方法,并展示在早期.NET版本中实现类似结果的替代方法,同时进行性能基准测试来比较它们的性能。

Index方法

Index方法返回一个元组(IEnumerable<(int Index, TSource Item)>),其中第一个值是索引,第二个值是集合中的元素。

为了演示这个方法的工作原理,我创建了一个城市列表,它将用于以下示例中:

代码语言:javascript
代码运行次数:0
运行
复制
public classCity
{
    publicstring Name {get;set;}
    publicstring Country {get;set;}

    publicCity(string name,string Country)
    {
        Name = name;
        Country = Country;
    }
}

var cities =newList<City>()
{
    newCity("Paris","France"),
    newCity("Berlin","Germany"),
    newCity("Madrid","Spain"),
    newCity("Rome","Italy"),
    newCity("Amsterdam","Netherlands")
};

使用Index方法,我们可以通过foreach循环轻松获取列表的索引和元素,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
foreach ((int index, City city) in cities.Index())
{
    Console.WriteLine($"Index: {index}, City: {city.Name}");
}

请注意,Index方法返回一个元组,其中第一个值是索引,第二个值是元素本身。输出结果如下:

代码语言:javascript
代码运行次数:0
运行
复制
Index: 0, City: Paris
Index: 1, City: Berlin
Index: 2, City: Madrid
Index: 3, City: Rome
Index: 4, City: Amsterdam

另一种实现相同结果的方法

在早期的.NET版本中,我们也可以通过使用Count以及传统的for循环来实现相同的结果,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var citiesCount = cities.Count();

for (int i = ; i < citiesCount; i++)
{
    Console.WriteLine($"Index: {i}, City: {cities[i].Name}");
}

另一种方法是使用LINQ的Select方法来获取集合中有索引的元素,然后通过foreach循环对其进行迭代,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
var indexedElements = cities.Select((item, index) => 
  new { Index = index, Item = item });

foreach (var item in indexedElements)
{
    Console.WriteLine($"Index: {item.Index}, City: {item.Item.Name}");
}

在这两种情况下,输出结果都将与使用Index方法的示例相同。

基准测试

考虑到性能因素,我针对之前介绍的这三种不同方法,使用一个包含100,000条记录的列表进行了基准测试,你可以在下面看到测试结果:

图片
图片
代码语言:javascript
代码运行次数:0
运行
复制
| 方法 | 平均时间 | 误差 | 标准偏差 | 排名 |
| ---- | ---- | ---- | ---- | ---- |
| '新的Index方法' | 11.33秒 | 0.224秒 | 0.209秒 | 1 |
| '使用foreach的Select方法' | 11.51秒 | 0.202秒 | 0.189秒 | 1 |
| '使用Count的For循环方法' | 12.42秒 | 0.239秒 | 0.200秒 | 2 |

新的Index方法执行速度最快,在执行时间上略有优势,在效率方面排名最高。

使用Select结合foreach循环的方法与新的Index方法性能相当,只是在执行速度上有微小差异。

使用Countfor循环的传统方法仅比其他方法稍慢一点,性能差异较小。

Index方法允许你以一种简单且高效的方式返回列表中各项的索引位置。将该方法与其他实现相同功能的方法进行比较时,性能非常相似,但它仍稍胜一筹。如果目标是追求最高效率,即便很小的差异也很重要,特别是在处理高频访问的情况下。除此之外,这种方法还能使你的代码更简洁、更易于阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Index方法
  • 另一种实现相同结果的方法
  • 基准测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档