我有一个文档,其中的单词是由空格分隔和提取的。为此,我使用了以下代码。
string[] words = s.Split(' ');
现在的问题是我将把这个代码用于搜索引擎的解析器。因此,如果不是数以百万计的网页,需要分成几十个字。
我的担心是否正确使用上述代码可能需要很长时间或者没有根据。如果它是对的,那么欢迎任何关于替代可扩展解决方案的建议。
答案 0 :(得分:0)
编写自己的实现,返回推迟执行的IEnumerable<string>
。例如:
private static IEnumerable<string> CreateSplitDeferredEnumerable(
string str,
char delimiter)
{
var buffer = new StringBuilder();
foreach (var ch in str) {
if (ch == delimiter) {
yield return buffer.ToString();
buffer.Length = 0;
} else {
buffer.Append(ch);
}
}
if (buffer.Length != 0) {
yield return buffer.ToString();
}
}
public static IEnumerable<string> SplitDeferred(this string self, char delimiter)
{
if (self == null) { throw new ArgumentNullException("self"); }
return CreateSplitDeferredEnumerable(self, delimiter);
}
不是一次性拆分字符串并返回每个子字符串的数组(这将消耗大量内存),而是可以枚举返回的可枚举,并且字符串将被拆分为 - 飞。假设您在每次迭代后都没有保留枚举的字符串对象,它们将立即有资格进行垃圾回收。