我当前正在使用sortedCollection,该字典存储字符(键)的字典和该字符(值)的出现次数。当遍历sortedCollection时,如何仅访问键值?
例如
[que last notNil] whileTrue: [
stdout << 'current character is ' *key* << ' and occurs << *val* << ' times.' << nl.
]
que
是按值对字典进行排序的sortedCollection。
我的目标是:假设que
有:
[$a:20, $e:100]
,其中第一个字母是字典的关键字,第二个数字是字典的值。我的输出应如下所示:
current character is a and occurs 20 times.
current character is e and occurs 100 times.
由于键是任意的,我不确定如何获得a
或字典中的键。
答案 0 :(得分:1)
假设que
是一个有序集合,并且每个元素都是一个以字符为键且以count为值的Association,如您的[$a:20, $e:100]
示例中所示,您可以这样做:
que do: [:each | stdout << 'current character is ' << each key
<< ' and occurs ' << each value << ' times.' << nl]
如果que是字典,请使用que keysAndValuesDo: [:char :count | stdout << "..." char << "..." count << "..." nl]
。
根据您的整个应用程序,您还可以使用Bag,它是元素的无序集合,可以多次出现(与Set相对,Set仅包含每个元素一次)。
characters := 'hello world' asBag.
characters asSet do: [:each |
stdout << 'current character is ' << each
<< ' and occurs ' << (characters occurrencesOf: each)
<< ' times.' << nl]
您还可以查看#sortedByCount方法,看看它是否适合您的情况。我无法从参考资料中得知返回的集合的确切结构,因此不会为您提供示例代码。