1

我有点辛苦地描述我的情况,因此我的帖子可能会长一点。

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

有一个类具有 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 与行内容一起保存。

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

4

2 回答 2

1

理想情况下,在文件中查找字符串非常密集,您只想执行一次。我认为最好将类引用存储在字典或哈希表中。

然后你可以做类似的事情

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
}
于 2012-05-15T07:40:35.287 回答
0

在字符串中拆分、计数是自然资源和时间密集型的。您需要解析和搜索。您必须遍历所有字符串并保存它,然后使用Dictionary<key, value>. 尝试循环最少的循环,实现这一点的方法是在所有行上运行程序并首先保存它。不要在每次搜索时扫描行。

于 2012-05-15T07:31:04.010 回答