none
Duda con metodo Aggregate RRS feed

  • Pregunta

  • Hola, Quiero saber como, el método Aggregate toma los elementos para comparar en este ejemplo.

    string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };
    
    
    string longestName =
        fruits.Aggregate("banana",
                        (longest, next) =>
                            next.Length > longest.Length ? next : longest);
    
    Console.WriteLine("The longest name is {0}.",  longestName);
    
    Supongo que hace algún tipo de bucle, asignando al inicio longest="banana" y luego dentro del bucle, next representa a cada elemento de la matríz. Es así?


    jueves, 9 de julio de 2020 12:28

Respuestas

Todas las respuestas

  • hola

    El framework de net es open source, puedes ver tu mismo el codigo si necesitas analizar su implementacion

    referencesource system linq

    como veras si itera data item y lo evalua con la funcion que le proporcionas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta AntiWork jueves, 9 de julio de 2020 16:08
    jueves, 9 de julio de 2020 14:11
  • Hola AntiWork,

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto la siguiente información y como lo comenta Leandro Tuttini el framework es open source y tu lo puedes analizarlo.

    public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func)
            {
                if (source == null) throw Error.ArgumentNull("source");
                if (func == null) throw Error.ArgumentNull("func");
                using (IEnumerator<TSource> e = source.GetEnumerator()) {
                    if (!e.MoveNext()) throw Error.NoElements();
                    TSource result = e.Current;
                    while (e.MoveNext()) result = func(result, e.Current);
                    return result;
                }
            }


    Gracias por usar los foros de MSDN. 

      

    Eric Ruiz

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 9 de julio de 2020 14:31
    Moderador
  • Gracias amigos por sus respuestas. Viendo la pagina que me dejó Leandro, encontre tres variantes del método. Creo que la que aplica a mi ejemplo es esta:

    public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func) {
                if (source == null) throw Error.ArgumentNull("source");
                if (func == null) throw Error.ArgumentNull("func");
                TAccumulate result = seed;
                foreach (TSource element in source) result = func(result, element);
                return result;
            }
    Al ejecutar mi ejemplo, el parámetro seed toma el valor de "banana".

    jueves, 9 de julio de 2020 16:07