2015-08-08 31 views
1

我不知道如何最好地描述这一点。我有一个近80,000字的文本文件,我已将其转换为字符串数组。提供的索引点内的C#搜索数组

基本上我想要一个方法,我把它传给一个单词,并检查它是否在单词字符串数组中。为了保存搜索结果,每次搜索80,000个索引位置时,以每个字母开头的词以二维数组开头和结尾。因此,当'A'字开始并且wordIndex [1,0] = 4407是它们结束的地方时,wordIndex [0,0] = 0。然后wordIndex [0,1] = 4408,这是以'B'开头的单词开始的地方等。

我想知道的是如何将此范围提交给一个方法来让它搜索一个值。我知道我可以给一个指数和长度,但这是唯一的方法吗?我可以说在范围y和z内寻找x?

+0

我会创建一个你调用的方法来搜索这个单词,这会找到指向这个2d数组的索引,并将索引从它中取出来。然后,我会将单词+索引传递给可以对该单词进行二进制搜索的方法。如果你把'STACK'作为一个单词传递,我会从你的数组以及'SU'(S + T之后的S +下一个字母)抓取'ST'索引,然后使用二分搜索在该范围内进行搜索。 –

+0

说了.NET中已经存在像Dictionary或HashSet这样的数据结构,可以用来解决这类问题。 –

回答

1

基本上你可以使用for循环搜索只是一个阵列的一部分:

string word = "apple"; 
int start = 0; 
int end = 4407; 
bool found = false; 

for (int i = start; i <= end ; i++) 
{ 
    if (arrayOfWords[i] == word) 
    { 
     found = true; 
     break; 
    } 
} 

但由于索引的描述意味着你的数组已经排序更好的办法可能是去与Array.BinarySearch<T>

+0

啊哈,当然是的,我太忙了,觉得有一个捷径,并没有停下来想我可以循环它。这可能是我的快速和肮脏的解决方案。只是希望有一些优雅的方法。非常感谢。 :) –

3

看看Trie set。它可以帮助您使用少量内存和快速搜索来存储很多单词。 Here是很好的实现。

+0

我想如果我研究这些,我可能会比自己高一点。这绝对是我将来考虑的事情。 –

+0

@LJSpring要勇敢:)它是非常好的数据结构,并具有“简单”的实现。如果您需要一些帮助 - 只需询问 – Backs

+0

谢谢Backs :)只是不想比讲师目前提供的材料更快。虽然在某个时候可能会让他吃惊! –