¿Cómo puedo pedir una List <string>?

Respuestas:

238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
daryal
fuente
@Servy una razón para usar OrderBy sería que ListaServizi no tiene un método Sort porque está declarado como IList<string>. Este código realmente funcionaría como está escrito, a diferencia de las respuestas que recibieron más votos a favor con ListaServizi.Sort(). No digo que esta sea la solución que elegiría, pero en realidad fue la única respuesta correcta cuando publiqué mi respuesta.
phoog
Si no es la solución que elegiría, ¿por qué proponerla como respuesta? Proponga lo que haría como respuesta; si eso significa cambiar el tipo de IList a List para poder llamarlo .Sort, entonces ¿por qué no hacerlo?
Servicio
1
@Servy Resolvió el problema sin cambiar la especificación del problema. Esa es la forma preferida, de lejos. Además, el enunciado del problema utiliza la interfaz sobre el patrón de implementación, que es muy importante. Proponer el cambio al tipo Lista es correcto, pero debe hacerse como una respuesta alternativa, después de la correcta, porque requiere cambiar el problema.
Aurelien Ribon
1
@ AurélienRibon Nada en la declaración del problema dice que el tipo de variable no se puede cambiar. Los requisitos son muy específicos para clasificar un List. Y el costo asociado con esta respuesta no es trivial y también innecesario. Literalmente no gana nada . Agrega complejidad al código, es menos conciso, es menos eficiente, literalmente no hay nada más que desventajas aquí.
Servicio
45

Puede utilizar Ordenar

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();
Richard Dalton
fuente
12

Otras respuestas son correctas para sugerir Sort, pero parecen haber pasado por alto el hecho de que la ubicación de almacenamiento se escribe como IList<string. Sortno es parte de la interfaz.

Si sabe que ListaServizisiempre contendrá un List<string>, puede cambiar su tipo declarado o usar un molde. Si no está seguro, puede probar el tipo:

if (typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))
    ((List<string>)ListaServizi).Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Quizás más idiomático:

List<string> typeCheck = ListaServizi as List<string>;
if (typeCheck != null)
    typeCheck.Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Si sabe que ListaServizia veces tendrá una implementación diferente de IList<string>, deje un comentario y agregaré una sugerencia o dos para ordenarlo.

phoog
fuente
5
ListaServizi.Sort();

Hará eso por ti. Es bastante sencillo con una lista de cadenas. Necesita ser un poco más inteligente al clasificar objetos.

Ste
fuente
3
ListaServizies IList<string>; la interfaz no tiene un Sortmétodo. Al menos necesitas un yeso aquí.
phoog
3
List<string> myCollection = new List<string>()
{
    "Bob", "Bob","Alex", "Abdi", "Abdi", "Bob", "Alex", "Bob","Abdi"
};

myCollection.Sort();
foreach (var name in myCollection.Distinct())
{
    Console.WriteLine(name + " " + myCollection.Count(x=> x == name));
}

salida: Abdi 3 Alex 2 Bob 4

Abdi
fuente