您将如何在以下示例中对字符串进行排序?

时间:2010-03-19 14:10:27

标签: string sorting

所以我有一个字符串列表
{测试,testertest,测试,测试仪,testingtest}
我想按降序排序..你如何对字符串进行排序?它是基于长度还是字符的特征?
怎么会在上面的例子?我想以降序排序它们。

7 个答案:

答案 0 :(得分:2)

我会这样排序:

testingtest
测试
testertest
测试人员 测试

答案 1 :(得分:2)

无论您使用何种语言,都有一个内置的sort函数执行lexicographical order,返回

['test','tester','testertest','testing','testingtest']

为您的例子。如果我想要这样做,我只想在Python中说reversed(sorted(myList))并完成它。如果你向右看,你可以看到许多需要更专业的排序方法(数字,日期等)的相关问题,但是词典顺序适用于包含任何类型数据的字符串。

以下是它的工作原理:

compare(string A, string B):
    if A and B are both non-empty:
        if A[0] == B[0]:
            // First letters are the same; compare by the rest
            return compare(A[1:], B[1:])
        else:
            // Compare the first letters by Unicode code point
            return compare(A[0], B[0])
    else:
        // They were equal till now; the shorter one shall be sorted first 
        return compare(length of A, length of B)

答案 2 :(得分:1)

假设C#

string[] myStrings = {"test","testertest","testing","tester","testingtest"};
Array.Sort(myStrings);
Array.Reverse(myStrings);
foreach(string s in myStrings)
{
     Console.WriteLine(s);
}

并不总是一种理想的方式 - 你可以实现一个自定义比较器 - 但是对于一个简单的例子,你问这可能是最合乎逻辑的方法。

答案 3 :(得分:1)

在计算机科学中,字符串通常按字符排序,首选排序顺序为(对于标准英语字符集):

  • 首先是空字符
  • 其次是whitepsace
  • 后面跟着符号
  • 后面跟着明显数字顺序的数字字符
  • 按明显的字母顺序排列字母字符

排序字符时,通常小写字符位于大写字符之前。

例如,如果我们要进行排序/比较:

  

测试 ng
  测试 e r

然后“测试者”将在“测试”之前出现 - 字符串中的第一个不同的字符是第5个,“e”出现在“i”之前。

如果我们要进行比较,则相似:

  

测试
     测试

然后在这种情况下,“test”将首先出现 - 直到第5个字符的字符串是相同的,其中字符串“test”结束(即没有字符),它在任何字母数字字符之前。

请注意,这可能会在处理数字时产生一些反直觉的结果 - 例如尝试对字符串“50”和“100”进行排序 - 您会发现“100”在之前 <50> ”。为什么?因为字符串1在字符1上不同而“5”在“1”之后。

在几乎所有语言中都有一个功能可以为您完成以上所有操作!

您应该使用该功能而不是尝试自己排序字符串!例如:

// C#
string[] myStrings = {"test","testertest","testing","tester","testingtest"};
Array.Sort(myStrings);

答案 4 :(得分:0)

在Java中,您可以使用自然排序

java.util.Collections.sort(list);

让它下降

java.util.Collections.reverse(list);

或创建自己的Comparator进行反向排序。

答案 5 :(得分:0)

当比较两个字符串以查看首先排序时,通常在逐个字符的基础上进行比较。如果第一个位置的字符(例如,示例中的t)相同,则移动到下一个字符。当两个字符不同时,“可以”定义哪个字符串被认为是“更大”。

但是,根据所使用的区域设置和许多其他因素,可能会比较两个字符串中的后续字符以覆盖较早字符的差异。例如,在某些校对中,字母上的变音符号被认为是次要权重。因此,后一个字符的主要区别可以覆盖次要差异。

当两个字符串相同但一个字符串较长时,较长的字符串通常被认为是“更大”。按降序排序时,首先对两个字符串中的“更大”进行排序。

答案 6 :(得分:0)

您是否想知道test是否应按降序排列tester之后?或者您对排序具有类似前缀的字符串特别感兴趣吗?

如果是后者,如果输入的时间过长,我会建议Trie