gpt4 book ai didi

c# - 在 richtextbox 中查找所有换行符

转载 作者:行者123 更新时间:2023-11-30 17:28:31 25 4
gpt4 key购买 nike

我正在处理自定义文本编辑器控件并遇到了这个问题。

我需要一个函数来获取文本中每个换行符“\n”的字符索引。我已经有两种方法可以完成此任务:

private List<int> GetNewLineLocations()
{
var list = new List<int>();
int ix = 0;
foreach (var c in this.Text)
{
if (c == '\n') list.Add(ix);
ix++;
}
Debug.WriteLine(ix);
return list;
}

和:

private List<int> GetNewLineLocations()
{
var list = new List<int>();
int ix = -1;

for (int i = 0; i < this.Lines.Length; i++)
{
ix += Lines[i].Length;
ix += 1;
list.Add(ix);
}

return list;
}

第一个解决方案确实有效,但是当在大约 40000 个字符的 richtextbox 中输入更多文本时速度会变慢,但可以分布在很多行中,例如 20000。

第二个似乎更快,因为它循环更少,做的事情或多或少相同,但在 1000 行时速度显着降低,无论它们包含多少文本。

代码当然需要快速运行并且不使用大量资源,这就是为什么我认为第二种解决方案会更好。

我的问题是:

  1. 哪种解决方案更好,为什么?

  2. 为什么第二个解决方案这么慢?

  3. 还有更好的解决方案吗?

最佳答案

我尝试了您的示例和 Felix 的示例以及我自己使用富文本框和 40k 行的解决方案。结果是这是最快的,而且我没有看到减速。您能否尝试将行数组作为参数传递并让我们知道结果?

public static List<int> GetNewLineLocations(this string[] lines)
{
var list = new List<int>();
int ix = -1;

for (int i = 0; i < lines.Length; i++)
{
ix += lines[i].Length+1;
list.Add(ix);
}

return list;
}

关于c# - 在 richtextbox 中查找所有换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52758122/

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