Weekly-Challenge-2022-Kotlin icon indicating copy to clipboard operation
Weekly-Challenge-2022-Kotlin copied to clipboard

Solucion reto 32 con C# .net 6

Open mancha-24 opened this issue 3 years ago • 5 comments

Solucion reto 32 con C# .net 6 - (cambio ordenamiento para obtener el mas alto)

mancha-24 avatar Aug 11 '22 00:08 mancha-24

No se me había ocurrido usar Skip. Por si quieres otra alternativa, tienes el operador de indexación ^ y todos los operadores de indexación de los arrays en C# [1..2] etc. para coger un grupo de elementos o lo que sea, ^ simplemente apunta al último y el ^2 apunta al penúltimo y así .

Aún que leí por ahí que ninguna de estas dos soluciones pasa un test de performance cuando se le inyectan miles de millones de datos por el uso del OrderBy de Linq y cosas por el estilo.

Perdón, es que no subo los retos, por eso comento por aquí :P, que no hay mucha gente que participe con C#

Gracias por aportar la solución, tengo que pensar más en skip jeje.

Por cierto, Ensure.That no es una librería (aún que la hay) simplemente lanza excepción si no se cumplen los requisitos.

Documentación: https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/proposals/csharp-8.0/ranges

static void Main(string[] args)
    {
        IEnumerable<int> numbers = new List<int>() { 1,2,43,4,25,6,7,8,9,10,5,12,3 };
        IEnumerable<int> nullList = null;
        IEnumerable<int> intList = new int[] { 1,2,4};
        IEnumerable<int> intList2 = new int[] { 1 };

        Console.WriteLine(GetSecondMax(intList2)); 
    }`

    public static int GetSecondMax(IEnumerable<int> numbers)
    {
        Ensure.That(numbers).IsNotNull();
        Ensure.That(numbers).ContainsMinElements<int>(2);

        return numbers.OrderBy(x => x).ToArray()[^2];
    }

RamonMartinezNieto avatar Aug 13 '22 14:08 RamonMartinezNieto

Yo intentaré unirme a los retos en c#

alvperagu avatar Aug 14 '22 17:08 alvperagu

var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 1231,1231,  312, 231, 213, 123, 1, 2 };
    var secondMax = numbers.OrderByDescending(x => x).Distinct().Skip(1).FirstOrDefault();
    Console.Write(secondMax ); 

Ésta sería mi solución

alvperagu avatar Aug 14 '22 17:08 alvperagu

Muy, pero que muy buen apunte, ese Distinct marca la diferencia, no lo había pensado, mira que el problema es simple pero se le sacan las costuras fácil. Grax por compartir!

RamonMartinezNieto avatar Aug 14 '22 20:08 RamonMartinezNieto

Buen aporte y el Ensure.That lo encuentro muy util la verdad no lo conocia! Mil gracias.

El distinct da la cara para el performance

Gracias por sus aportes!

mancha-24 avatar Aug 14 '22 20:08 mancha-24