gpt4 book ai didi

C# 以 int 数组作为索引过滤循环的更快方法?

转载 作者:行者123 更新时间:2023-11-30 15:51:52 27 4
gpt4 key购买 nike

抱歉,如果这是重复的,第一个问题...

我想对大量称为注释的结构进行操作。但我不想对笔记的每个元素进行操作。我正在尝试使用 int 数组 (int[]) 的 filter 来跳过其中的很多内容,如下面的代码所示。

Note[] notes = new Note[]
{
// Struct stuff ...
};

int[] filter = new int[]{ 4,20,50,367... };

for (int i = 0; i < notes.Length; i++)
{
bool flag = false;
for (int j = 0; j < filter.Length; j++)
{
if (i == filter[j])
{
flag = true;
break;
}
}

if (flag) continue;
// Do something on notes[i]
}

问题是,当注释数组和过滤器数组都扩展时,代码将运行非常慢(我认为)。那么,是否有更好、更快的方法来做到这一点?请注意,过滤器的大小可以是基于其他条件的任何大小

最佳答案

我们可以在 HashSet<int> 的帮助下摆脱内部循环同时拥有更好的O(|filter| + |notes|) 时间复杂度 而不是初始的 O(|filter| * |notes|) :

Note[] notes = new Note[] { 
... //Struct stuff
};

int[] filter = new int[] {
4, 20, 50, 367...
};

HashSet<int> toExclude = new HashSet<int>(filter);

for (int i = 0; i < notes.Length; i++) {
if (toExclude.Contains(i)) // O(1) time complexity
continue;

//Do something on notes[i]
}

关于C# 以 int 数组作为索引过滤循环的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55824737/

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