如何对List<string>进行排序?

168

我有这个 List<string>:

IList<string> ListaServizi = new List<string>();

如何按字母顺序升序排序?


4
你尝试过使用.Sort吗?参考链接为http://msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs.90%29.aspx。 - Matthew
排序方法;如果您需要降序,可以与Reverse组合使用。 - Nathan Q
5个回答

314
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

1
@Servy 使用OrderBy的一个原因是ListaServizi没有Sort方法,因为它被声明为IList<string>。这段代码实际上可以按照编写的方式工作,不像那些得到更多赞的答案使用了ListaServizi.Sort()。我并不是说这是我选择的解决方案,但当我发布我的答案时,这实际上是唯一正确的答案。 - phoog
如果这不是你会选择的解决方案,那为什么要将其作为答案提出呢?请提出你认为正确的答案;如果这意味着将类型从IList更改为List以便可以调用.Sort,那为什么不这样做呢。 - Servy
1
@Servy他在不改变问题规范的情况下解决了问题。这绝对是首选的方式。此外,问题陈述使用了接口而非实现模式,这非常重要。建议将更改提议为List类型,但应作为正确答案之后的备选答案,因为它需要更改问题。 - Aurelien Ribon
1
@AurélienRibon,问题陈述中没有提到变量类型不能更改。要求非常明确,是对“List”进行排序。而这个答案所涉及的成本是相当大的,也是不必要的。它实际上没有任何好处。它增加了代码的复杂性,不够简洁,效率也不高,这里真的没有任何优点。 - Servy

60

您可以使用Sort

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();

17

其他答案正确地建议使用Sort,但他们似乎忽略了存储位置被声明为IList<string>的事实。 Sort不是接口的一部分。

如果您知道ListaServizi将始终包含List<string>,则可以更改其声明类型或使用强制转换。如果不确定,您可以测试类型:

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

或许更符合惯用语:

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

如果您知道ListaServizi有时会保持不同的IList<string>实现,请留下评论,我将添加一些建议来对其进行排序。


8
ListaServizi.Sort();

我会为您做这件事。如果是字符串列表,这很直观。如果需要对对象进行排序,则需要稍微聪明一些。


5
ListaServizi 是一个 IList<string> 类型的变量,这个接口没有 Sort 方法。至少需要进行一次类型转换。 - phoog

5
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));
}

output: Abdi 3 Alex 2 Bob 4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接