我有一个像
这样的文件56.32 211.398 1 81.0966
56.55 21.6862 1 51.2413
56.48 21.4071 2 298.1962
52.69 211.017 2 262.2705
53.88 211.759 3 258.1490
56.08 21.3705 3 262.2397
我想将它保存到List,删除第三个位置的整数 所以我会得到
56.32, 211.398, 81.0966
56.55, 21.6862, 51.2413
56.48, 21.4071, 298.1962
52.69, 211.017, 262.2705
53.88, 211.759, 258.1490
56.08, 21.3705, 262.2397
我在尝试:
List<double[]> fileData = new List<double[]>();
fileData = System.IO.File.ReadAllLines(fileName)
.Select(x => x.Split(new char[] { '\t', ' ' },
StringSplitOptions.RemoveEmptyEntries)
.Select(y => double.Parse(y))
.ToArray())
.ToList();
但我得到以下内容,如何忽略第三个数字?
56.32, 211.398,1, 81.0966
56.55, 21.6862,1, 51.2413
56.48, 21.4071,2, 298.1962
52.69, 211.017,2, 262.2705
53.88, 211.759,3, 258.1490
56.08, 21.3705,3, 262.2397
答案 0 :(得分:6)
您可以使用Where()
重载,该重载使用带有索引的lambda并按该索引过滤:
List<double[]> fileData = System.IO.File.ReadAllLines(fileName)
.Select(x => x.Split(new char[] { '\t', ' ' },
StringSplitOptions.RemoveEmptyEntries)
.Where((s, index) => index != 2) // filters out the third column
.Select(y => double.Parse(y))
.ToArray())
.ToList();
答案 1 :(得分:0)
我希望在你的最终选择之前添加一个where子句可以解决这个问题:
List<double[]> fileData = new List<double[]>();
fileData = System.IO.File.ReadAllLines(fileName)
.Select(x => x.Split(new char[] { '\t', ' ' },
StringSplitOptions.RemoveEmptyEntries)
.Where(s=>s.Contains(".")
.Select(y => double.Parse(y))
.ToArray())
.ToList();
答案 2 :(得分:0)
正则表达式进行救援:
var doubles = Regex.Split(text, @"\s{2,}\d+\s|\r\n|\s").Select(s => double.Parse(s));