Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

119
Visualizações
Tome los primeros cinco elementos y los últimos cinco elementos de una matriz mediante una consulta usando LINQ

Recientemente, un compañero de trabajo me preguntó: ¿Es posible simplemente tomar los primeros cinco elementos y los últimos cinco elementos mediante una consulta de una matriz?

 int[] someArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };

Lo que he probado:

 int[] someArray = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; var firstFiveResults = someArray.Take(5); var lastFiveResults = someArray.Skip(someArray.Count() - 5).Take(5); var result = firstFiveResults; result = result.Concat(lastFiveResults);

¿Es posible tomar solo los primeros cinco elementos y los últimos cinco elementos en una consulta?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede usar un método .Where con lambda que acepta el índice del elemento como su segundo parámetro:

 int[] someArray = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 }; int[] newArray = someArray.Where((e, i) => i < 5 || i >= someArray.Length - 5).ToArray(); foreach (var item in newArray) { Console.WriteLine(item); }

Producción:

 0, 1, 2, 3, 4, 14, 15, 16, 17, 18
over 4 years ago · Santiago Trujillo Relatório

0

Una solución con ArraySegment<> (requiere .NET 4.5 (2012) o posterior):

 var result = new ArraySegment<int>(someArray, 0, 5) .Concat(new ArraySegment<int>(someArray, someArray.Length - 5, 5));

Y una solución con Enumerable.Range :

 var result = Enumerable.Range(0, 5).Concat(Enumerable.Range(someArray.Length - 5, 5)) .Select(idx => someArray[idx]);

Ambas soluciones evitan iterar a través del "medio" de la matriz (índices 5 a 13).

over 4 years ago · Santiago Trujillo Relatório

0

En caso de que no esté jugando a los rompecabezas de código con sus compañeros de trabajo, pero solo quiera crear una nueva matriz con sus criterios, no haría esto con consultas en absoluto, sino que usaría Array.copy.

Hay tres casos distintos a considerar:

  • la matriz de origen tiene menos de 5 elementos
  • la matriz de origen tiene de 5 a 9 elementos
  • la matriz de origen tiene 10 o más elementos

El tercero es el caso simple, ya que el primero y el último 5 elementos son distintos y están bien definidos.

Los otros dos requieren más reflexión. Asumiré que desea lo siguiente, verifique esas suposiciones:

Si la matriz de origen tiene menos de 5 elementos, querrá tener una matriz de 2 * (longitud de la matriz), por ejemplo, [1, 2, 3] se convierte en [1, 2, 3, 1, 2, 3]

Si la matriz de origen tiene entre 5 y 9 elementos, querrá tener una matriz de exactamente 10 elementos, por ejemplo, [1, 2, 3, 4, 5, 6] se convierte en [1, 2, 3, 4, 5, 2, 3, 4, 5, 6]

Un programa de demostración es

 public static void Main() { Console.WriteLine(String.Join(", ", headandtail(new int[]{1, 2, 3}))); Console.WriteLine(String.Join(", ", headandtail(new int[]{1, 2, 3, 4, 5, 6}))); Console.WriteLine(String.Join(", ", headandtail(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}))); } private static T[] headandtail<T>(T[] src) { int runlen = Math.Min(src.Length, 5); T[] result = new T[2 * runlen]; Array.Copy(src, 0, result, 0, runlen); Array.Copy(src, src.Length - runlen, result, result.Length - runlen, runlen); return result; }

que corre en O(1);

Si está jugando rompecabezas de código con sus compañeros de trabajo, bueno, toda la diversión está en el rompecabezas, ¿no es así?

Aunque es trivial.

 src.Take(5).Concat(src.Reverse().Take(5).Reverse()).ToArray();

esto se ejecuta en O(n).

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda