C# 搜索短语

C# 搜索短语,c#,.net,search,data-structures,tree,C#,.net,Search,Data Structures,Tree,我有一个单词数组,取自一个句子(句子中的每个单词都放在一个数组中) 用户可以搜索一个短语,看看是否在这个句子中找到。这将通过字符的偏移值来确定。这意味着要分别检查每个单词是否存在于短语中,然后检查单词是否在后面(在句子中用空格分隔) 单词存储在树中,因此偏移值(字符位置)是唯一确定单词后面的单词(并用空格分隔)的东西 我的问题是,相同的单词(并且已经存储在树中)具有相同的偏移量值,因此每个单词存储与特定单词一起分配的所有偏移量值的数据结构。这是我到目前为止得到的代码,除了在以下情况下失败之外,它

我有一个单词数组,取自一个句子(句子中的每个单词都放在一个数组中)

用户可以搜索一个短语,看看是否在这个句子中找到。这将通过字符的偏移值来确定。这意味着要分别检查每个单词是否存在于短语中,然后检查单词是否在后面(在句子中用空格分隔)

单词存储在树中,因此偏移值(字符位置)是唯一确定单词后面的单词(并用空格分隔)的东西

我的问题是,相同的单词(并且已经存储在树中)具有相同的偏移量值,因此每个单词存储与特定单词一起分配的所有偏移量值的数据结构。这是我到目前为止得到的代码,除了在以下情况下失败之外,它工作得很好:

例如,我有一句话:
这是一个测试,看看这是否有效

如果搜索“this is a”,则返回第一个
this is
,以及
this is a

代码如下:

for (int i = 0; i < offsets.Count - 1; i++)
{
    LinkedList<int> current = allOffsets[i];
    LinkedList<int> next = allOffsets[i + 1];

    for (int j = 0; j < current.Count; j++)
    {
        for (int k = 0; k < next.Count; k++)
        {
            if (current.ElementAt(j) + words[i].Length - 1 + 2 == next.ElementAt(k))
            {
                if (!finalResult.Contains(current.ElementAt(j)))
                {
                    finalResult.Add(current.ElementAt(j));
                }

                if (!finalResult.Contains(next.ElementAt(k)))
                {
                    finalResult.Add(next.ElementAt(k));
                }
            }
        }
     }
}

return finalResult;
for(int i=0;i
请注意,
finalResult
是一个存储所有“有效”偏移的列表,
offset
存储树中的所有偏移
words
是一个数组,包含从句子中拆分出来的所有单词

编辑:另外请注意,我正在通过将单词的第一个字母的偏移量乘以2(以说明空格)来检查单词是否紧跟在一起,这将等于下一个单词的第一个字母的偏移量,如果它紧跟其后。

var source=new List(){“this”、“is”、“a”、“test”、“to”,“看”、“如果”、“这”、“正在”、“工作”};
        var source = new List<string>() { "this", "is", "a", "test", "to", "see", "if", "this", "is", "working" };
        var userInput = "this is a";
        var inputList = userInput.Split(' ');
        var inputListCount = inputList.Count();
        var exists = false;
        for (int i = 0; i < source.Count; i++)
        {
            if (inputList[0] == source[i])
            {
                var found = true;
                for (int j = 1; j < inputListCount; j++)
                {
                    if (inputList[j] != source[j])
                    {
                        found = false;
                        break;
                    }
                }

                if (found)
                {
                    exists = true;
                    break;
                }
            }
        }

        Console.WriteLine(exists);
var userInput=“这是一个”; var inputList=userInput.Split(“”); var inputListCount=inputList.Count(); var=false; for(int i=0;i
不确定您想要什么,但如果您只想检查它是否存在,我认为我的程序可以工作。虽然这看起来不错,但不幸的是,这对我的问题不好。无论如何,谢谢。所需的输出只是一个字符串短语吗?或者您需要在数组中使用这些偏移量来做其他事情吗?