【问题标题】:Is string.split efficent for large volumes of text [closed]string.split 对大量文本有效吗[关闭]
【发布时间】:2019-08-21 16:25:34
【问题描述】:

所以我创建了一些可以接受两个字符串的代码行,将它们拆分,并将 1 个字符串的每个单词与另一个字符串进行比较,并说如果存在相同的单词,那么这将是一种有效的方法吗?比较大量文本中的单词,谈论 300-10000 个单词,因为 string,split 是由数组工作的,所以它会破坏计算机内存吗? 对不起,我还在学习一个级别的 cs,所以几乎不知道任何术语。

我听说正则表达式非常擅长这种事情,但它很混乱。

static void Main(string[] args)
{
    string text1 = "yeet went the black fox  cry went the chicken";
    string text2 = "yeet  the  fox  cry  the ";

    string[] spaced1 = text1.Split(" ");
    string[] spaced2 = text2.Split(" ");

    for (int s = 0; s < spaced1.Length; s++)
    {
        if (spaced1[s]== spaced2[s])
        {
            Console.WriteLine("same word");
            Console.WriteLine(spaced1[s]);            
        }
    }

    Console.ReadLine();
}

这个特定的代码给出了我想要的结果,我仍然需要让它在昏迷和句号等处分裂。

【问题讨论】:

标签: c#


【解决方案1】:

如果您必须处理大量单词,我希望它们存储在某个文件中。然后你可以使用Stream。在 10000 字的情况下,您不必担心,因为这不是一个很大的数字。您可能必须查看字符串中可以包含多少个单词here 干杯

【讨论】:

  • 如果我实现流阅读器,string.split 会正常工作吗?
  • 你可以看看这个example
  • 当然。 Split 适用于字符串。不管它们来自文件还是其他来源。
【解决方案2】:

不完全确定您想在这里实现什么,但假设这是一个学习项目。

您正在做的是尝试查找两个数组中都存在的项目。为此,您可以使用 Intersect 方法。

string text1 = "yeet went the black fox  cry went the chicken";
string text2 = "yeet  the  fox  cry  the ";

string[] spaced1 = text1.Split(' ');
string[] spaced2 = text2.Split(' ');

IEnumerable<string> output = spaced1.Intersect(spaced2);

这将创建您想要的输出。

【讨论】:

  • OP 说他已经有了想要的输出。他只是想知道使用正则表达式是否比 string.split 更节省内存。
  • 这可以与流式阅读器一起使用吗?就好像我刚刚从一个文件中得到了所有的单词
  • 问题中的代码示例只返回相同的单词并且在相同的位置。此答案中的代码返回所有匹配的单词,无论位置如何。不确定这是否重要。
  • 啊,这更有意义
  • 所以我实现了“IEnumerable output = spaced1.Intersect(spaced2);”代码,但它给出了 "System.Linq.Enumerable+d__77`1[System.String]" 而不是 esired 字符串,我知道这不是错误,但我不知道如何实际输出它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 2012-12-23
  • 1970-01-01
相关资源
最近更新 更多