1

我目前正在使用 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, 或字典中的键,因为键是任意的。

4

1 回答 1

1

假设这que是一个排序集合,并且每个元素都是一个关联,其中字符作为键,计数作为值,如您的[$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 不同,它只包含每个元素一次)。

characters := 'hello world' asBag.
characters asSet do: [:each |
    stdout << 'current character is ' << each
           << ' and occurs ' << (characters occurrencesOf: each) 
           << ' times.' << nl]

您还可以查看#sortedByCount方法,看看它是否适合您的情况。我无法从参考中得知它返回的集合的结构究竟如何,因此我不会为您提供猜测的示例代码。

于 2018-11-12T17:30:19.107 回答