2009-03-21 15 views
5

¿Alguien puede explicar por qué esto no funciona como creo que debería?Enumerable. Salvo el problema

double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.3, 2.3, 2.4, 2.5 }; 
double[] numbers2 = { 2.2 }; 

IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2); 

foreach (double number in onlyInFirstSet) 
    Console.WriteLine(number); 

/* 
This code produces the following output: 

2 
2.1 
2.3 
2.4 
2.5 
*/ 

Lo que esperaría es 2, 2.1, 2.3, 2.3, 2.3, 2.4, 2.5. ¿Por qué habría que devolver una lista distinta? ¿Es esto un error?

Actualización:

Ok, totalmente perdido ese punto en la documentación. Funny 4 personas responden con la misma respuesta. Usted pensaría que simplemente votaría al hombre que respondió primero :)

+0

@James: Agregué una manera de hacer lo que quieras, por cierto, que pensé que probablemente sea más útil para ti que "no, no funciona de esa manera". ;) –

+0

Muchas gracias. Iba a preguntar eso el próximo, pero tú también me ganaste. No hay forma de darte puntos extra de brownie, pero gracias. –

+0

Eso está bien. ¡Mi amigo acaba de hacerme brownies, así que estoy lleno! ;) –

Respuesta

8

¿Por qué habría que devolver una lista distinta? ¿Es esto un error?

Nope. Except produce un establece la diferencia. Consulte documentation:

Produce la diferencia de dos secuencias mediante el uso del comparador de igualdad predeterminado para comparar valores.

Para hacer lo que quiera, simplemente use Where para filtrar los valores apropiadamente. Por ejemplo:

"abcdddefffg".Where(e => !"cde".Contains(e));  // Produces "abfffg". 
1

Esto es realmente el comportamiento correcto. El método Except está documentado para devolver el establecer diferencia de los dos argumentos de IEnumerable. Como por definición, los conjuntos no pueden contener elementos duplicados, estos se eliminan en el resultado. Vea el MSDN docs para más información.

1

Porque "Excepto" es una función "establecer", y el concepto de "conjunto" se define como una lista única de elementos. En otras palabras, los conjuntos por definición no pueden contener duplicados.

Cuestiones relacionadas