/ / Consulta LINQ para el subconjunto de dos arreglos paralelos - c #, linq

Consulta LINQ para un subconjunto de dos matrices paralelas: c #, linq

Estoy trabajando en una aplicación que utiliza mucha información espacial X, Y

Dados dos arreglos paralelos, uno que representa los valores X y el otro los valores Y, ¿hay una manera de seleccionar un subconjunto de ambas matrices? El subconjunto se determina utilizando un valor inicial y final en la matriz de valores x.

Aquí hay un ejemplo de dos matrices paralelas.

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
};

Supongamos que quisiera un subconjunto de ambos valores de x y valores de y donde x es mayor o igual a 0.1 y menor o igual a 0.2. El resultado de tal subconjunto debe ser dos matrices paralelas:

double[] x_subset = new double[] {
0.12, 0.16, 0.2
};
double[] y_subset = new double[] {
0.3800, 0.7880, 0.0488
};

Las matrices x e y siempre tendrán el mismo número de elementos.

He intentado usar Zip pero eso no funciona. Aparte de usar loops antiguos, no puedo pensar en otra cosa. Sin embargo, soy nuevo en LINQ.

Respuestas

7 para la respuesta № 1

Puede ser algo como esto:

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

Mediante el uso disponible en la versión 4.0 disponible. Enumerable.Zip.


0 para la respuesta № 2

Puede utilizar las consultas LINQ para seleccionar los elementos que coinciden.

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

(También podrías usar un Func<double, bool> f = (a) => a >= .1 && a <= .2) ) y pasar eso como argumento a .Where)