按字典顺序排序C#

5

我有一个用于排序字符串的代码:

 class Program
{
    static void Main()
    {

        int x = Convert.ToInt32(Console.ReadLine());
        List<string> sampleList = new List<string>();

        for (int i=0; i<x; i++)
        {
            string word = Console.ReadLine();
            sampleList.Add(word);
        }


        foreach (string s in SortByLength(sampleList))
        {
            Console.Write(s);
        }
        Console.ReadLine();
    }

    static IEnumerable<string> SortByLength(IEnumerable<string> e)
    {
        // Use LINQ to sort the array received and return a copy.
        var sorted = from s in e
                     orderby s.Length descending
                     select s;
        return sorted;
    }
}

这段代码按照字符串长度进行排序,如何实现按照长度和字典顺序排序呢?
示例:
//Input
4
abba
abacaba
bcd
er

//Output
abacabaabbabcder

在这种情况下,工作正常,但当我有

时,就会出现问题。
//Input
5
abba
ebacaba
bcd
er
abacaba

//Output
ebacabaabacabaabbabcder

我的第一个字符串是 ebacaba,这是错误的。


1
你可以尝试使用以下代码: var sorted = e.OrderByDescending(x => x.Length).ThenBy(x => x).ToList() - Teodor Kurtev
我不理解你要实现第二种情况的模式(5个输入),能否给出期望的输出? - Ian
请使用此链接 https://dev59.com/g4jca4cB1Zd3GeqPrRKw#28638804 - Ahmad Hajou
3个回答

6

编辑:

默认情况下,非字符在词法上比字符小,因此您可以利用这一点省略ThenBy,但仍会得到与此相同的结果(感谢Matthew Watson):

string str = "abba ebacaba bcd er abacaba output ebacabaabacabaabbabcder";
string[] strs = str.Split(' ').OrderBy(x => x).ToArray(); //same result, but shorter

使用 OrderByThenBy
string str = "abba ebacaba bcd er abacaba output ebacabaabacabaabbabcder";
string[] strs = str.Split(' ').OrderBy(x => x).ThenBy(x => x.Length).ToArray();

您将获得:

abacaba //aba is earlier than abb
abba
bcd
ebacaba
ebacabaabacabaabbabcder
er

1
如果你省略掉.ThenBy(),我认为你会得到完全相同的输出。 - Matthew Watson
@MatthewWatson 你是对的!我刚刚测试了一下。似乎非字符比字符在词法上更小。 - Ian
这只是标准的字典顺序。让我想知道原帖作者想要什么...啊!我明白了!他想按长度排序,然后再按值排序。 - Matthew Watson

4
您可以使用 thenby :
static IEnumerable<string> SortByLength(IEnumerable<string> e)
{
    // Use LINQ to sort the array received and return a copy.
    var sorted = e.OrderByDescending(s=>s.Length).ThenBy(r=>r);                 
    return sorted;
}

你能否添加如何按字典顺序排序的说明? - Teddy Codes

2

更改您的函数t:

static IEnumerable<string> SortByLength(IEnumerable<string> e)
{
        // Use LINQ to sort the array received and return a copy.
        var sorted = from s in e
                     orderby s.Length descending, s
                     select s;
        return sorted;
    }

这将输出:

abacabaabbabcder
abacaba
output
abb
bcd
edr

当使用 new List<string>{"abb", "abacaba", "bcd", "edr", "output", "abacabaabbabcder"}

它将按照 s.Length 排序,然后按照 s(字典顺序)排序


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