gpt4 book ai didi

c# - String.Split 效率问题

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:40 24 4
gpt4 key购买 nike

我正在编写一个对大型文本语料库进行标记的搜索应用程序。

文本解析器需要从文本中移除任何乱码(即 [^a-zA-Z0-9])

我脑子里有两个想法如何做到这一点:

1) 将文本放入字符串中,使用 String.tocharArray 将其转换为 charArray,然后使用循环逐个运行 char -> while(position < string.length)这样做我可以在文本上运行一次标记化整个字符串数组。

2) 使用 string.replace 去除所有非数字/alpha,然后使用一些定界符去除 string.split,这意味着我必须在整个字符串上运行两次。一次删除坏字符,然后再次拆分它。

我假设,因为 #1 与 #2 的作用相同,但在 O(n) 中它会更快,但在测试两者之后,#2 的方式(方式!)更快。

我走得更远,使用 red-gate .net 反射器查看了 String.Strip 背后的代码。它像 #1 一样一个字符一个字符地运行非托管字符,但仍然快得多。

我不知道为什么 #2 比 #1 快得多。

有什么想法吗?

最佳答案

这个想法怎么样:

  1. 创建一个字符串
  2. 将整个数据集加载到字符串中
  3. 创建一个具有足够预分配空间的 StringBuilder 来容纳整个字符串
  4. 逐个字符地遍历字符串,如果字符是字母数字,则将其添加到 StringBuilder。
  5. 最后,从 StringBuilder 中取出字符串。

我不知道这是否会比您已经尝试过的更快,但上述时间安排至少应该可以回答这个问题。

关于c# - String.Split 效率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4128666/

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