繁体   English   中英

检查定界字符串的并集是否重复

[英]Check union of delimited strings for duplicates

我有一个文本文件,例如PM.INX,它是文件详细信息的逗号分隔列表,每行四个字段。 这些文件(大约12个文件名,但结构相同)可以包含20-30行或几百行。 几行示例如下所示:

"2FLAT0.6","2FLAT0£6",2,33.82  
"BZ95M","BZ95M",1,36.26  
  • 字段1是实际名称;
  • 字段2是重命名的文件,其中所有句号,“&”号或加号都更改为“£”;
  • 字段3是性别代码-男性1,女性2;
  • 字段4是文件中各项的校验和总数。

当用户想要添加新项目时,我需要检查该项目是否已经存在,因此需要拆分每一行并检查新项目与第一个项目相比是否不存在。
因此,我可以将文件读取为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM