我正在开发一个使用大量X,Y空间信息的应用程序.
给定两个并行数组,一个表示X值,另一个表示Y值,有没有办法从两个数组中选择一个子集? 通过使用x值阵列中的起始和停止值来确定子集.
这是两个并行数组的示例.
double[] xs = new double[] {
0.0, 0.04, 0.08, 0.12, 0.16,
0.2, 0.24, 0.28, 0.32, 0.36,
0.4, 0.44, 0.48, 0.52, 0.56,
0.6, 0.64, 0.68, 0.72, 0.76,
0.8, 0.84, 0.88, 0.92
};
double[] ys = new double[] {
0.0152, 0.1434, 0.1647, 0.3800,
0.7880, 0.0488, 1.0060, 0.2710,
0.0363, 0.4321, 0.5573, 0.2192,
0.6341, 0.5181, 0.9546, 0.8275,
0.5567, 0.9870, 0.8895, 0.3423,
0.6061, 0.1507, 0.7841, 0.6512
};
Run Code Online (Sandbox Code Playgroud)
假设我想要x值和y值的子集,其中x大于或等于0.1且小于或等于0.2.这样一个子集的结果应该是两个并行数组:
double[] x_subset = new double[] {
0.12, 0.16, 0.2
};
double[] y_subset = new double[] {
0.3800, 0.7880, 0.0488
};
Run Code Online (Sandbox Code Playgroud)
x和y数组将始终具有相同数量的元素.
我尝试使用Zip,但这不起作用.除了使用普通的旧循环,我想不出别的什么.不过,我是LINQ的新手.
可能是这样的:
var zipped = xs.Zip(ys, (x, y) => new { x, y })
.Where(coord => coord.x > 0.1 && coord.x <= 0.2);
Run Code Online (Sandbox Code Playgroud)
通过使用4.0版本中可用的Enumerable.Zip.