什么是字典顺序?

What is lexicographical order?

字典顺序的确切含义是什么?它与字母顺序有何不同?

字典顺序字母顺序。另一种类型是数字排序。考虑以下值,

1, 10, 2

这些值是按字典顺序排列的。 10 按数字顺序排在 2 之后,但 10 按 "alphabetical" 顺序排在 2 之前。

字典序就是字典序。 例如:在字典中 'ado' 在 'adieu' 之后,因为 'o' 在英文字母系统中在 'i' 之后。 此排序不是基于字符串的长度,而是基于最小字母最先出现的顺序。

字母顺序是一种特殊的词典顺序。术语词典通常指的是数学规则或排序。例如,这些包括从逻辑上证明排序是可能的。在 wikipedia

上阅读有关词典顺序的更多信息

字母顺序包括在如何处理空格、大写字符、数字和标点符号方面有所不同的变体。纯粹主义者认为,允许使用 a-z 以外的字符会使排序不是 "alphabetic",因此它必须落入 "lexicographic" 中较大的 class。同样,wikipedia 有更多详细信息。

在计算机编程中,一个相关的问题是字典顺序ascii码顺序。在字典顺序中,大写字母 "A" 与小写字母 "a" 相邻排序。然而,在许多计算机语言中,默认的字符串比较将使用 ascii 码。对于 ascii,所有大写字母都排在所有小写字母之前,这意味着 "Z" 将排在 "a" 之前。这有时称为 ASCIIbetical order.

这仅表示 "dictionary order",即单词在字典中的排序方式。如果您要确定这两个词中的哪个在字典中出现在另一个之前,您可以从第一个位置开始逐个字母地比较单词。例如,单词 "children" 将出现在单词 "chill" 之前(并且可以认为更小),因为这两个单词的前四个字母相同,但 "children" 中第五个位置的字母(即 d )在第五个字母之前(或小于) "chill" 中的位置(即 l )。观察纵向,单词 "children""chill" 大,但长度不是这里的标准。同样的道理,会出现一个包含12345的数组 在包含 1235 的数组之前。 (Deshmukh, OCP Java SE 11 Programmer I 1Z0815 Study guide 2019)

我想添加一个与术语的编程方面而不是数学方面更相关的答案。

词典顺序并不总是等同于“字典顺序”,至少这个定义在编程领域并不完整,而是指“基于多个标准的排序".

例如,几乎在所有著名的编程语言中,都有用于对对象集合进行排序的标准工具,现在如果你想根据多个事物对集合进行排序怎么办? ?例如,假设您想先根据价格然后再根据受欢迎程度对某些商品进行排序。 这是一个字典顺序的例子。

例如在 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()”方法时指代此类排序:

Returns a lexicographic-order comparator with another comparator.

词典顺序只是字典顺序,或者最好是单词在字典中出现的顺序。例如,让我们使用三个字符串,“short”、“shorthand”和“small”。在字典中,“短”在“shorthand”之前,“shorthand”在“小”之前。这是字典顺序。