【发布时间】:2018-02-07 14:11:42
【问题描述】:
字典顺序的确切含义是什么?它与字母顺序有何不同?
【问题讨论】:
标签: string sorting lexicographic
字典顺序的确切含义是什么?它与字母顺序有何不同?
【问题讨论】:
标签: string sorting lexicographic
字典顺序是字母顺序。另一种类型是数字排序。考虑以下值,
1, 10, 2
这些值按字典顺序排列。 10 按数字顺序排在 2 之后,但 10 按“字母”顺序排在 2 之前。
【讨论】:
String - 也就是说10 在2 之前,但111 在10 之后(但也在1000 之后)。因为0 小于1。词法排序将每个字符串中的字符作为字符进行比较,而不是整数值。
字母顺序是一种特殊的字典顺序。术语词典通常是指数学规则或排序。例如,这些包括从逻辑上证明排序是可能的。在wikipedia上阅读更多关于字典顺序的信息
字母顺序包括在处理空格、大写字符、数字和标点符号方面不同的变体。纯粹主义者认为,允许 a-z 以外的字符使排序不是“字母”,因此它必须属于更大的“词典”类别。同样,wikipedia 有更多详细信息。
在计算机编程中,一个相关的问题是dictionary order 或ascii code order。按字典顺序,大写“A”与小写“a”相邻排序。但是,在许多计算机语言中,默认字符串比较将使用 ascii 代码。对于 ascii,所有大写字母都排在小写字母之前,这意味着“Z”将排在“a”之前。这有时称为ASCIIbetical order。
【讨论】:
这只是表示“字典顺序”,即单词在字典中的排序方式。如果要确定字典中两个单词中的哪一个会排在另一个之前,则可以从第一个位置开始逐个字母比较单词。例如,单词 “children” 将出现在单词 “chill” 之前(并且可以认为更小),因为这两个单词的前四个字母相同但是 "children" 中第五位的字母(即 d )在 "chill" 中第五位的字母之前(或小于)(即 l )。纵向观察,“children”这个词大于“chill”,但长度不是这里的标准。同理,会出现一个包含12345的数组 在包含 1235 的数组之前。 (Deshmukh, OCP Java SE 11 Programmer I 1Z0815 Study guide 2019)
【讨论】:
字典顺序是指字典顺序。 例如:在字典中,“ado”在“adieu”之后,因为在英文字母系统中,“o”在“i”之后。 此排序不是基于字符串的长度,而是基于最小字母在前的出现。
【讨论】:
我想添加一个与术语的编程方面而不是数学方面更相关的答案。
字典顺序并不总是等同于“字典顺序”,至少这个定义在编程领域并不完整,而是指“基于多个标准的排序”。
例如,几乎在所有著名的编程语言中,都有用于对对象集合进行排序的标准工具,现在如果您想根据不止一件事对集合进行排序怎么办?例如,假设您想先根据价格对某些商品进行排序,然后再根据它们的受欢迎程度对它们进行排序。 这是一个字典顺序的例子。
例如在 Java (8+) 中,您可以这样做:
// sorts items from the cheapest AND the most popular ones
// towards the most expensive AND the least popular ones.
Collections.sort(items,
Comparator.comparing(Item::price)
.thenComparing(Item::popularity)
.reversed()
);
Java documentation 也使用这个术语,在解释“thenComapring()”方法时指代这种类型的排序:
返回一个字典顺序比较器和另一个比较器。
【讨论】:
字典顺序只不过是字典顺序,或者最好是单词在字典中出现的顺序。例如,让我们取三个字符串,“short”、“shorthand”和“small”。在字典中,“short”在“shorthand”之前,“shorthand”在“small”之前。这是字典顺序。
【讨论】: