3 回答
TA贡献1864条经验 获得超6个赞
假设您从文件中获取输入,您可以简单地创建一个字典,其中 Key 是第一个子字符串,并且在读取文件时将子字符串添加到字典中(如果不存在)。最后,值将包含以该键开头的整行,但仅一次
Dictionary<string, string> keys = new Dictionary<string,string>();
foreach(string line in File.ReadLines("yourInputFile.csv"))
{
if(!keys.ContainsKey(line.Split(',')[0]))
keys.Add(line.Split(',')[0], line);
// or, if you want only the second element
//keys.Add(line.Split(',')[0], line.Split(',')[1]);
}
现在,您可以通过简单的操作轻松检索独特的线条
string[] values = keys.Values.ToArray();
当然,所有这些分割都可以只执行一次,添加一个中间数组变量,然后使用它
Dictionary<string, string> keys = new Dictionary<string,string>();
foreach(string line in File.ReadLines("yourInputFile.csv"))
{
var splittedLine = line.Split(',');
if(!keys.ContainsKey(splittedLine[0])
keys.Add(splittedLine[0], line);
// or, if you want only the second element
//keys.Add(splittedLine[0], splittedLine[1]);
}
TA贡献1828条经验 获得超3个赞
您是否考虑过使用 group by 和 split
IEnumerable<string> ids = new List<string> {
"968934,655,814",
"968934,123,814"
};
ids = from i in ids
group i by i.Split(',')[0] into g
select g.FirstOrDefault();
TA贡献1821条经验 获得超6个赞
使用 LINQ 和 GroupBy,您可以按字符串的第一段进行分组,如果有多个项目具有相同的第一段,则将其删除。
var items = list
.Select(s => new
{
FirstPart = s.Substring(0, s.IndexOf(',')),
String = s
})
.GroupBy(s => s.FirstPart)
.SelectMany(g => g.Count() == 1
? new[] { g.First().String }
: g.Select(x => x.String.Substring(x.FirstPart.Length + 1)))
.ToList();
- 3 回答
- 0 关注
- 115 浏览
添加回答
举报