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

本文关键字:搜索 数据结构 字符串 net 用于 | 更新日期: 2023-09-27 18:34:15

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

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

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

感谢您的任何输入...托比

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

在文件中查找字符串非常密集,因此理想情况下,您只想执行此操作一次。我认为如果您将类引用存储在字典或哈希表中,这是理想的选择。

然后你可以做一些类似的事情

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
}

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