默认情况下,SortedCollection区分大小写(考虑到当今大多数情况下使用String的情况,这令我感到惊讶),例如,

list := #('z' 'c' 'C' 'A' 'a').
slist := list asSortedCollection. "a SortedCollection('A' 'C' 'a' 'c' 'z')"

在Spotter中,我找到了caseInsensitiveLessOrEqual:,但不确定如何将它与SortedCollection一起使用。如何轻松获得忽略大小写的排序集合?

最佳答案

asSortedCollection:也需要一个排序块:

list := #('z' 'c' 'C' 'A' 'a').
slist := list asSortedCollection:
    [ :a :b | a caseInsensitiveLessOrEqual: b ]. "a SortedCollection('a' 'A' 'C' 'c' 'z')"

编辑这是获得一致订单的解决方案(这很丑陋,我是从研究caseInsensitiveLessOrEqual:来的)
caseInsensitiveCompare := [ :a :b | | result |
    result := a compare: b caseSensitive: false.
    "equal ignoring case"
    result = 2 ifTrue: [ a compare: b caseSensitive: true ].
    "less than, so return true (else return false since result=2)"
    result = 1  ].

slist := list asSortedCollection: caseInsensitiveCompare.
"a SortedCollection('A' 'a' 'C' 'c' 'z')"

关于smalltalk - SortedCollection忽略字符串中的大小写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56019671/

10-13 07:50