【问题标题】:How to order a list by one property after ordering it by a different one?在按不同属性排序后如何按一个属性排序列表?
【发布时间】:2019-09-19 16:01:22
【问题描述】:

按元音数量排序后,如何按字典顺序对字符串列表进行排序?

这是按元音数量对字符串列表进行排序的代码:


        private void sortList()
        {
            List<words> wordsList = new List<words>();
            words word = new words();
            word.name = "word";
            word.vowels = 1;
            wordsList.Add(word);

            word = new words();
            word.name = "wood";
            word.vowels = 2;
            wordsList.Add(word);

            word = new words();
            word.name = "grass";
            word.vowels = 1;
            wordsList.Add(word);

            List<words> sortedList = wordsList.OrderBy(o => o.vowels).ToList();

            foreach (words w in sortedList)
            {
                listBox1.Items.Add(w.name);
            }
        }

        public class words
        {
            public string name;
            public int vowels;
        }

之后,如何按字典顺序对元音数相同的字符串进行排序?

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为代码有效,但正在寻求更好的方法。询问Code Review
  • 我不知道如何按字典顺序对具有相同数量元音的字符串进行排序,我认为有一种方法可以同时进行元音排序和字典排序,最终无需使用其他类。 (如果只使用它不是一个好主意)
  • “最好”是主观的,甚至“更好”也是模糊的。我们可能会编写易于阅读和测试的代码,知道它可以更快,但节省的时间是微不足道的。但在另一种情况下,性能可能很关键。
  • stackoverflow.com/questions/4875737/… 是您的新问题的适当副本。

标签: c#


【解决方案1】:

要在元音计数排序后添加字典排序,可以使用ThenBy扩展方法,按name字段排序。下面的代码说,“首先按vowels 属性排序,然后,对于所有具有相同元音计数的单词,按name 属性排序”

List<words> sortedList = wordsList
    .OrderBy(wrd => wrd.vowels)
    .ThenBy(wrd => wrd.name)
    .ToList();        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多