忽略字符串中大小写的 SortedCollection
SortedCollection that ignores case in strings
默认情况下,SortedCollection
区分大小写(考虑到如今字符串的使用方式,这让我感到惊讶),例如
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')"
我正在添加地址 @Amos M. Carpenter 评论的答案 - 排序稳定性。您的第二个代码不必要地复杂。你可以做的是将一个 asSortedCollection
添加到 list
(这将根据字母表位置和 "capitalness" 对字符串进行排序,你会得到一致的解决方案:
list := #('z' 'c' 'C' 'A' 'a') asSortedCollection.
slist := list asSortedCollection:
[ :a :b | a caseInsensitiveLessOrEqual: b ]. "SortedCollection('a' 'A' 'c' 'C' 'z')"
list := #('z' 'C' 'c' 'A' 'a') asSortedCollection.
slist := list asSortedCollection:
[ :a :b | a caseInsensitiveLessOrEqual: b ]."SortedCollection('a' 'A' 'c' 'C' 'z')"
默认情况下,SortedCollection
区分大小写(考虑到如今字符串的使用方式,这让我感到惊讶),例如
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')"
我正在添加地址 @Amos M. Carpenter 评论的答案 - 排序稳定性。您的第二个代码不必要地复杂。你可以做的是将一个 asSortedCollection
添加到 list
(这将根据字母表位置和 "capitalness" 对字符串进行排序,你会得到一致的解决方案:
list := #('z' 'c' 'C' 'A' 'a') asSortedCollection.
slist := list asSortedCollection:
[ :a :b | a caseInsensitiveLessOrEqual: b ]. "SortedCollection('a' 'A' 'c' 'C' 'z')"
list := #('z' 'C' 'c' 'A' 'a') asSortedCollection.
slist := list asSortedCollection:
[ :a :b | a caseInsensitiveLessOrEqual: b ]."SortedCollection('a' 'A' 'c' 'C' 'z')"