C#文本文件数据解析及Tuple存储坐标重复问题求助
问题解决:解析文本时坐标重复的问题
问题根源
你的代码中positions是在循环外部声明的集合,每次循环都会往里面追加当前行的坐标,但你始终取positions[0]和positions[1]——也就是第一行的坐标值,导致所有条目都重复第一行的坐标。
解决方法
不需要依赖全局的positions集合,直接在循环内解析当前行的坐标为局部变量即可,更简洁且避免错误:
foreach(var line in File.ReadLines(file)) { var values = line.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); // 处理多空格情况 int x = int.Parse(values[0]); int y = int.Parse(values[1]); var category = values[3]; var certainty = double.Parse(values[4]); results.Add(new(x, y, category, certainty)); }
可选方案(如果一定要用集合存储当前行坐标)
如果坚持要用类似positions的集合,需要每次循环重新初始化集合,只存储当前行的两个坐标:
foreach(var line in File.ReadLines(file)) { var values = line.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); var positions = new List<int>(); // 每次循环新建集合,只存当前行坐标 for (var i = 0; i < 2; i++) { positions.Add(int.Parse(values[i])); } var category = values[3]; var certainty = double.Parse(values[4]); results.Add(new(positions[0], positions[1], category, certainty)); }
额外提示
用Split(" ")时,如果文本行里有多个连续空格,会生成空字符串元素,建议用Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries)过滤掉空值,避免解析时抛出异常。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

