用于搜索字符串的适当数据结构(.net)

时间:2012-05-15 07:25:00

标签: c# .net string data-structures

我有点刻意描述我的情况,因此我的帖子可能会更长。

我想在字符串中搜索给定的键。字符串是文本文件的行,比较是在文件逐行读取时完成的。

有一个类具有NUMBER和TYPE等属性。这是要在行字符串中搜索的键。

一个简单的解决方案是将类实例存储在列表中,并为每一行运行该列表,并查看行字符串是否包含当前列表条目的键。

这个实现的性能虽然很糟糕,因为程序将在每个行的平均值循环遍历整个列表。这是因为列表中的每个键最多只能在文件中出现一次。所以有很多行不包含密钥。

我希望你们能得到我想要解释的内容并获得这个想法。

对象示例:

O1:
  ID - 1
  NR - 1587
  TYPE - COMPUTER

O2:
  ID - 2
  NR - 5487
  TYPE - TV

text file lines:
  bla bla \t 8745 RADIO
  fsdakfjd9 9094km d9943
  dkjd894 4003p \t 5487 TV
  sdj99  43s39 kljljkljfsd 
  ...

在第3行,程序应找到匹配项,并将ID 2与行内容一起保存。

感谢您的任何意见...... 托比

2 个答案:

答案 0 :(得分:1)

查找文件中的字符串非常密集,理想情况下,您只需要执行一次。 我认为如果你将类引用存储在Dictionary或Hashtable中是理想的。

然后你可以做类似

的事情
var myDictionary = new Dictionary<string, ObjectType>();
while(string line = reader.ReadLine())
{
    // Parse the possible key out of the line
    if (myDictionary.ContainsKey(keyFromLine) doSomething(line, myDictionary[keyFromLine]);
}

void doSomething(string line, ObjectType instance)
{
  // Unwrap the line and store appropriate values
}

答案 1 :(得分:0)

分裂,在字符串内计数是按自然资源和时间密集的。你需要解析和搜索。您必须遍历所有字符串并保存它,然后使用Dictionary<key, value>进行搜索。尝试循环最少和完成的方法是通过在所有行上运行程序并首先保存它。不要在每次搜索时扫描线条。