Предполагая, что 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 , который представляет собой неупорядоченную коллекцию элементов, которые могут появляться несколько раз (в отличие от набора, который содержит каждый элемент только один раз).
characters := 'hello world' asBag.
characters asSet do: [:each |
stdout << 'current character is ' << each
<< ' and occurs ' << (characters occurrencesOf: each)
<< ' times.' << nl]
Вы также можете взглянуть на метод # sortedByCount и посмотреть, подходит ли он для вашего случая. Я не могу сказать по ссылке, как именно его возвращенная коллекция структурирована, поэтому я не буду предоставлять вам угаданный пример кода.