我有一个名为PM.INX的文本文件,它是一个以逗号分隔的文件详细信息列表,每行有四个字段。文件(大约12个,文件名不同但结构相同)可以包含20-30行或几百行。几个示例行看起来像:
"2FLAT0.6","2FLAT0£6",2,33.82
"BZ95M","BZ95M",1,36.26
当用户想要添加新项目时,我需要检查是否已存在,因此需要拆分每一行并检查新项目是否已存在,与第一项进行比较。
所以我可以将文件读入一个字符串[],然后循环遍历每个项目,按行拆分数据并检查我的新项目,但是想知道是否还有另一种(LINQ?)方法可以做到这一点?
答案 0 :(得分:2)
你可以这样做(未经测试)。
items
.Select(x=>x.Split(',').Select(y=>y.Trim()).ElementAt(0))
.Any(x=>x == newfilename);
答案 1 :(得分:0)
如果您只想添加一个新项目,最简单快捷的方法是读取每一行,并将新项目的密钥与所有其他项目的密钥进行比较。
但是,如果要添加许多新项目,则效率非常低。它是(大致)O(n ^ 2)操作。如果将密钥添加到HashSet<T>
,则可以将其降低到O(n)操作。访问哈希集具有恒定的访问时间O(1)。
伪代码
var keys = new HashSet<string>();
foreach (line in file) {
string[] parts = line.Split(',');
keys.Add(parts[0];
}
foreach (newKey in newKeys) {
if (keys.Contains(newKey)) {
// Item already exists
...
} else {
// New item
keys.Add(newKey);
...
}
}