所以我有一个字符串列表
{测试,testertest,测试,测试仪,testingtest}
我想按降序排序..你如何对字符串进行排序?它是基于长度还是字符的特征?
怎么会在上面的例子?我想以降序排序它们。
答案 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)
在计算机科学中,字符串通常按字符排序,首选排序顺序为(对于标准英语字符集):
排序字符时,通常小写字符位于大写字符之前。
例如,如果我们要进行排序/比较:
测试我 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。