如果您的CSV文件不会改变太多,结构稳定,你可以简单地把它解析到的对象的列表在启动时
private class BookInfo {
string title {get;set;}
string person {get;set;}
List<int> pages {get;set;}
}
private List<BookInfo> allbooks = new List<BookInfo>();
public void parse() {
var lines = File.ReadAllLines(filename); //you could also read the file line by line here to avoid reading the complete file into memory
foreach (var l in lines) {
var info = l.Split(',').Select(x=>x.Trim()).ToArray();
var b = new BookInfo {
title = info[0],
person = info[1]+", " + info[2],
pages = info.Skip(3).Select(x=> int.Parse(x)).ToList()
};
allbooks.Add(b);
}
}
然后你就可以轻松地与例如LINQ搜索allbooks
列表。
编辑
现在,你已经澄清你的输入,我适应了解析一点点,以更好地满足您的需求。
如果你想要么title
或person
更容易,你也可以对每个属性
var titleLookup = allbooks.ToLookup(x=> x.title);
var personLookup = allbooks.ToLookup(x => x.person);
所以personLookup["Thomas, George"]
会给你所有bookinfos列表的创建查找搜索您的书目是提及“托马斯,乔治”和titleLookup["Book 31"]
会给你一个“书31”的所有bookinfos列表,即该书中提到的所有人。
为什么XML?如果它是XML,搜索大量数据本身并不容易。 –
我很乐意提供建议......我只需要让搜索特定名称更容易一些。 – Alexandre
个人而言,我觉得这种问题是使用数据库的经典案例。我是[SQlite](https://www.sqlite.org/)的粉丝(也可在NuGet中获得)。您可以创建数据库,读取和解析文件,并为数据创建记录。然后你可以让数据库引擎为你搜索你的数据。还有很多其他的方法。 –