[英]Check union of delimited strings for duplicates
我有一个文本文件,例如PM.INX,它是文件详细信息的逗号分隔列表,每行四个字段。 这些文件(大约12个文件名,但结构相同)可以包含20-30行或几百行。 几行示例如下所示:
"2FLAT0.6","2FLAT0£6",2,33.82
"BZ95M","BZ95M",1,36.26
当用户想要添加新项目时,我需要检查该项目是否已经存在,因此需要拆分每一行并检查新项目与第一个项目相比是否不存在。
因此,我可以将文件读取为string [],然后遍历每个项目,按行拆分数据并检查我的新项目,但想知道是否还有另一种(LINQ?)方法吗?
您可以这样做(未经测试)。
items
.Select(x=>x.Split(',').Select(y=>y.Trim()).ElementAt(0))
.Any(x=>x == newfilename);
如果只想添加一个新项目,最简单,最快的方法是读取每一行,并将新项目的密钥与所有其他项目的密钥进行比较。
但是,如果您要添加许多新项目,则效率很低。 这是一个(大约)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);
...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.