【问题标题】:How can I order a List<string>?如何订购 List<string>?
【发布时间】:2012-04-18 14:24:36
【问题描述】:

我有这个List&lt;string&gt;

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

如何按字母和升序排列?

【问题讨论】:

标签: c# string list


【解决方案1】:
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

【讨论】:

  • @Servy 使用 OrderBy 的一个原因是 ListaServizi 没有 Sort 方法,因为它被声明为 IList&lt;string&gt;。与ListaServizi.Sort() 获得更多支持的答案不同,此代码实际上可以按编写方式工作。我并不是说这是我会选择的解决方案,但这实际上是我发布答案时唯一正确的答案。
  • 如果这不是您选择的解决方案,那么为什么要提出它作为答案呢?提出你会做什么作为答案;如果这意味着将类型从 IList 更改为 List 以便您可以在其上调用 .Sort,那么为什么不这样做。
  • @Servy 他在不更改问题规范的情况下解决了问题。到目前为止,这是首选方式。此外,问题陈述使用了接口优于实现的模式,这一点非常重要。建议更改为 List 类型是正确的,但应该在正确的答案之后作为替代答案进行,因为它需要更改问题。
  • @AurélienRibon 问题陈述中没有任何内容表明无法更改变量的类型。要求非常具体地对List 进行排序。与这个答案相关的成本是不平凡的,也是不必要的。它确实获得了nothing。它增加了代码的复杂性,不那么简洁,效率较低,这里实际上除了缺点什么都没有。
【解决方案2】:

你可以使用Sort

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

【讨论】:

    【解决方案3】:

    其他答案建议Sort 是正确的,但他们似乎忽略了存储位置键入为IList&lt;string 的事实。 Sort 不是界面的一部分。

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

    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&lt;string&gt; 的不同实现,请发表评论,我会添加一两个建议以对其进行排序。

    【讨论】:

      【解决方案4】:
      ListaServizi.Sort();
      

      会为您做到这一点。使用字符串列表很简单。如果对对象进行排序,您需要更聪明一点。

      【讨论】:

      • ListaServiziIList&lt;string&gt;;该接口没有Sort 方法。你至少需要一个演员。
      【解决方案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));
      }
      

      输出: 阿卜迪 3 亚历克斯 2 鲍勃 4

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2020-01-11
        • 2013-08-26
        • 1970-01-01
        • 2022-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多