用于在字符串 (.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 与行内容一起保存。
感谢您的任何输入...托比
在文件中查找字符串非常密集,因此理想情况下,您只想执行此操作一次。我认为如果您将类引用存储在字典或哈希表中,这是理想的选择。
然后你可以做一些类似的事情
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>
搜索它。尝试循环最少的,实现此目的的方法是在所有行上运行程序并首先保存它。不要在每次搜索时都扫描行。