Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个并行数组子集的LINQ查询_C#_Linq - Fatal编程技术网

C# 两个并行数组子集的LINQ查询

C# 两个并行数组子集的LINQ查询,c#,linq,C#,Linq,我正在开发一个使用大量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

我正在开发一个使用大量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
};
假设我想要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
};
x和y阵列将始终具有相同数量的元素


我试过使用Zip,但不起作用。除了使用普通的旧循环外,我想不出其他任何东西。不过,我对LINQ还不熟悉。

您可以使用LINQ查询来选择匹配的元素

x_subset = xs.Where(x => x >= .1 && x <= .2).ToArray();
y_subset = ys.Where(y => y >= .1 && y <= .2).ToArray();

您也可以使用Func f=a=>a>=.1&&a可能是这样的:

var zipped = xs.Zip(ys, (x, y) => new { x, y })
               .Where(coord => coord.x > 0.1 && coord.x <= 0.2);

通过使用4.0版本中的available(可用)。

我尝试过使用Zip,但不起作用。错误消息是什么?您确定使用的是C4或更新版本吗?你记得使用System.Linq吗?我没有收到错误;它就是不像我想象的那样工作。再说一次,我对LINQ还很陌生,所以也许Zip有一个隐藏的特性,我不知道。它确实有效。你一定做错了什么。但是y_子集不包含0.1到0.2之间的y值吗?这就是我喜欢C的原因。谢谢@使用Select:double x_subset=zipped.Selectz=>z.x;双y_子集=压缩。选择z=>z.y;