1

Given a ordered list:

var lst = new []{"1","10","2","b","ab"};
var lst2 = lst.OrderBy(c => c);

Result of lst2:

1, 10, 2, ab, b

Why does String.Compare() not also measure on the length of the string when it compares? I would have thought that the result would be more like this:

1, 2, 10, b, ab

Because 10 (something(1) and somthing(0)) should be after 2 (something(2) and nothing)

Could anybody give a good reason for this?

4

3 回答 3

10

如果全世界都使用你的排序算法,电话簿会是什么样子?

  • 安娜
  • 贝尔塔
  • 安娜玛丽
  • 比阿特丽克斯

字符串比较基于首先比较第一个字母(最好是:字符),如果它们相等,则第二个字符等。它不是基于单词的长度。

于 2013-04-23T08:47:44.500 回答
6

字符串是一组字符。
比较字符串时,基本上是集合比较,即比较两个字符串的第一个字符。只有当它们相同时,才会比较下一个字符等。

当通过第一个字符正确对齐无序字符串列表时,这变得很明显:

"1"
"10"
"2"
"b"
"ab"

下单后,结果如下:

"1"
"10"
"2"
"ab"
"b"

原因:

  • "2"之后会出现"1",因为'2'> '1'
  • "2"将出现在 之后"10",因为再次'2'> '1'。不考虑 '0'in ,因为第一个字符的比较已经产生了明确的结果。"10"
  • "ab"会来"2"的,因为'a'>'2'
  • "b"之后会出现"ab",因为'b'> 'a'。不考虑'b'in ,因为第一个字符的比较已经产生了明确的结果。"ab"

如果您想让字符串中的数字按您想要的方式排序,您可能需要查看"Natural Sort"
字符串的顺序没有意义,因此您可能必须自己构建它。

于 2013-04-23T08:47:54.847 回答
0

为什么会10在之后2

如果您使用以下单词的字母顺序对单词进行排序:x y xy,则结果为x xy y

对于数字,它与扩展的字符集完全相同。

于 2013-04-23T08:48:11.073 回答