una trabajo respuestas preguntas practicar para ingles estudiantes entrevistas entrevista ejemplo dialogo basico c# linq collections

c# - trabajo - entrevistas en ingles para practicar



Pregunta de la entrevista:.Any() vs if(.Length> 0) para probar si una colección tiene elementos (8)

.Length ... System.Array .Any ... IEnumerable (método de extensión).

Preferiría usar "longitud" siempre que pueda encontrarlo. La propiedad es, de todos modos, liviana que cualquier método llamado.

Sin embargo, la implementación de "Cualquiera" no hará nada más que el código mencionado a continuación.

private static bool Any<T>(this IEnumerable<T> items) { return items!=null && items.GetEnumerator().MoveNext(); }

Además, una pregunta mejor podría haber sido una diferencia entre ".Count" y ".Length", qué dicen :).

En una entrevista reciente, me preguntaron cuál era la diferencia entre .Any() y .Length > 0 y por qué usaría cualquiera de los dos al probar para ver si una colección tenía elementos.

Esto me lanzó un poco, ya que parece un poco obvio, pero siento que puedo estar perdiendo algo.

Le sugerí que use .Length cuando simplemente necesita saber que una colección tiene elementos y .Any() cuando desee filtrar los resultados.

Presumiblemente .Any() tiene un impacto en el rendimiento, ya que tiene que hacer un bucle / consulta internamente.


Creo que esta es una pregunta más general sobre qué elegir si tenemos 2 formas de expresar algo. En esta situación, sugeriría la declaración: "Sea específico", cita de Peter Norvig en su libro PAIP.

Sea específico significa usar lo que mejor describe lo que está haciendo. Así que lo que quieres decir es algo como:

collection.isEmpty()

Si no tienes tal construcción, elegiré el lenguaje común que usaron las comunidades. Para mí .Length > 0 no es el mejor, ya que impone el tamaño del objeto. Supongamos que implementas la lista infinita. .Lenght obviamente no funcionaría.


Sabemos que .Length solo se usa para Arrays y .Any () se usa para colecciones de IEnumerable.

Puede intercambiar .Count por .Length y tiene la misma pregunta para trabajar con colecciones de IEnumberable

Tanto .Any () como .Count realizan una comprobación nula antes de comenzar un enumerador. Así que con respecto al rendimiento son lo mismo.

En cuanto a la matriz, asumamos que tenemos la siguiente línea:

int[] foo = new int[10];

Aquí foo.Length es 10. Si bien esto es correcto, puede que no sea la respuesta que está buscando porque aún no hemos agregado nada a la matriz. Si foo es nulo lanzará una excepción.


Suena bastante similar a esta pregunta de acerca de la diferencia entre .Count y .Any para verificar la existencia de un resultado: Verificar la existencia de un resultado en Linq-to-xml

En ese caso, es mejor usar Any then Count, ya que Count contará todos los elementos de un IEnumerable


Supongo que el entrevistador pudo haber querido preguntar sobre la comprobación de Any() versus Count() > 0 (en lugar de Length > 0 ).

Básicamente, este es el trato.

Any() intentará determinar efectivamente si una colección tiene miembros al enumerar sobre un solo elemento. (Hay una sobrecarga para verificar un criterio dado usando un Func<T, bool> , pero supongo que el entrevistador se estaba refiriendo a la versión de Any() que no tiene argumentos). Esto hace que sea O (1).

Count() comprobará primero una propiedad de Length o Count (de una T[] o una ICollection o ICollection<T> ). Esto generalmente sería O (1). Sin embargo, si eso no está disponible, contará los elementos de una colección al enumerar todo el contenido. Esto sería O (n).

Una propiedad Count o Length , si está disponible, probablemente sería O (1) como Any() , y probablemente se desempeñaría mejor, ya que no requeriría enumeración. Pero el método de extensión Count() no asegura esto. Por lo tanto, a veces es O (1), a veces O (n).

Presumiblemente, si está tratando con un IEnumerable<T> no IEnumerable<T> y no sabe si implementa ICollection<T> o no, está mucho mejor usando Any() que Count() > 0 si su intención es simplemente Para asegurarse de que la colección no está vacía .


.Length recorre la colección y devuelve el número de elementos. La complejidad es O(n)

.Any comprueba si la colección tiene al menos un elemento. La complejidad es O(1) .


Length es una propiedad de los tipos de matriz, mientras que Any() es un método de extensión de Enumerable . Por lo tanto, puede usar Length solo cuando trabaje con arrays. Cuando trabaje con tipos más abstractos ( IEnumerable<T> ), puede usar Cualquier ().


Length solo existe para algunos tipos de colección, como Array .

Any es un método de extensión que se puede usar con cualquier colección que implemente IEnumerable<T> .

Si la Length está presente, entonces puedes usarla, de lo contrario, usa Any .

Presumiblemente .Any () también tiene un impacto en el rendimiento, ya que tiene que hacer un bucle / consulta internamente.

Enumerable.Any no hace bucle. Obtiene un iterador y comprueba si MoveNext devuelve true. Aquí está el código fuente de .NET Reflector .

public static bool Any<TSource>(this IEnumerable<TSource> source) { if (source == null) { throw Error.ArgumentNull("source"); } using (IEnumerator<TSource> enumerator = source.GetEnumerator()) { if (enumerator.MoveNext()) { return true; } } return false; }