检查分隔字符串的联合是否重复
本文关键字:是否 分隔 字符串 检查 | 更新日期: 2023-09-27 18:15:05
我有一个文本文件,例如PM。INX,它是一个以逗号分隔的文件详细信息列表,每行有四个字段。这些文件(大约有12个,文件名不同,但结构相同)可以包含20-30行或几百行。一些示例行如下所示:
"2FLAT0.6","2FLAT0£6",2,33.82
"BZ95M","BZ95M",1,36.26
- 字段1为实际名称;
- 字段2是重命名的文件,其中任何句号,&号或加号更改为'£';
- 字段3是性别代码- 1为男性,2为女性;和
- 字段4是文件中各项的校验和总和。
当用户想要添加一个新项目时,我需要检查它是否已经存在,所以需要将每一行分开,并检查新项目是否已经存在,与第一个项目进行比较。
因此,我可以将文件读入字符串[],然后循环遍历每个项目,按行拆分数据并检查新项目,但想知道是否有另一种(LINQ?)方法来做到这一点?
您可以这样做(未经测试)。
items
.Select(x=>x.Split(',').Select(y=>y.Trim()).ElementAt(0))
.Any(x=>x == newfilename);
如果您只想添加一个新项,最简单和最快的方法是读取每一行,并将新项的键与所有其他项的键进行比较。
然而,如果你想添加很多新项目,这是非常低效的。这是一个(大概)O(n^2)的操作。如果你把键加到HashSet<T>
,你可以把它降低到0 (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);
...
}
}