Pregunta ¿Hay una función LINQ para obtener la cadena más larga en una lista de cadenas?


Hay un LINQ función para esto es o tendrías que codificarlo ellos mismos así:

static string GetLongestStringInList()
{
    string longest = list[0];

    foreach (string s in list)
    {
        if (s.Length > longest.Length)
        {
            longest = s;
        }
    }

    return longest;
}

26
2017-11-02 04:50


origen


Respuestas:


Esto lo hará con una sola iteración de bucle:

list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur);

69
2017-11-02 04:59



Puedes usar esto: list.OrderByDescending(s => s.Length).First();


19
2017-11-02 04:53



var list = new List<string>(); // or string[] or any

list.Add("a");
list.Add("ccc");
list.Add("bb");
list.Add("eeeee");
list.Add("dddd");

// max-length
var length = list.Max(s => s.Length);

// biggest one
var biggest = list.FirstOrDefault(s => s.Length == length);

// if there is more that one by equal length
var biggestList = list.Where(s => s.Length == length);

// by ordering list
var biggest = list.OrderByDescending(s => s.Length).FirstOrDefault();

// biggest-list by LINQ
var bigList2 = from s in list where s.Length == list.Max(a => a.Length) select s;

// biggest by LINQ
var biggest2 = bigList2.FirstOrDefault();

5
2017-11-02 05:04



El método que desea se suele llamar "MaxBy" y desafortunadamente no se incluye en el conjunto estándar de operadores de secuencia. Afortunadamente es muy fácil escribirte a ti mismo. Vea esta respuesta para una implementación:

Linq group by con una sub consulta


4
2017-11-02 06:03



Para obtener la cadena más larga en la lista de objeto / cadena, intente esto:

List<String> list = new List<String>();
list.Add("HELLO");
list.Add("HELLO WORLD");
String maxString = list.OrderByDescending(x => x.Length).First();

La variable maxString contendrá el valor "HELLO WORLD"


0
2017-12-12 13:43



Agregue un ThenBy () para garantizar una orden de devolución si hay varias cadenas con la misma longitud

var longest = list.OrderByDescending(s => s.Length)
                   .ThenBy(s => s)
                   .FirstOrDefault();

-1
2017-11-02 05:23