gpt4 book ai didi

c# - 获取数组索引的优雅方式

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:01 27 4
gpt4 key购买 nike

我很难通过以下示例切换到 LINQ:

int[] inputs = { 5, 3, 5, 66, 4, 5 };
int[] indexes; // I want to have the indexes of '5's in
// the inputs array, which is { 0, 2, 5 }

// My way (traditional for loop)

List<int> indexesList = new List<int>();
for (int i = 0; i < inputs.Length; i++)
if (inputs[i] == 5)
indexesList.Add(i);

indexes = indexesList.ToArray();

// LINQ way

var indexes = inputs.Select((s, i) => new { i, s })
.Where(t => t.s == 5)
.Select(t => t.i).ToArray();

问题 1.效率(速度、内存使用)方面,如果我将我的代码转换为 LINQ,我会有什么优势吗?

问题 2.如果为真,是否有更优雅的方式使用 LINQ 来实现?

PS:请注意,这个方法在我的实际项目中调用非常频繁。因此,在速度或内存使用方面有一点改进将对整个过程有很大帮​​助。

最佳答案

如果您使用 LINQ 代码,您肯定不会拥有性能优势。只需阅读它就可以看出这一点:为了将每个值与其索引相关联,将创建一个新对象:

(s, i) => new { i, s }

这些匿名对象除了充当将索引和值粘合在一起的容器外没有其他用途;因此,与直接保持计数器相比,所有相关的内存管理都是纯粹的开销。

有人可能会说 LINQ 提供了可读性优势,因为大多数时候它突出了意图而不是机制,但在这种特殊情况下我不认为它比平淡无奇的解决方案要好。

关于c# - 获取数组索引的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com