Как просто получить ключ только на GNU Smalltalk? - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время я использую sortedCollection, в которой хранится словарь символов (ключ) и номер вхождения для этого символа (значение).Итерируя через sortedCollection, как мне получить доступ только к значению ключа?

например,

[que last notNil] whileTrue: [
    stdout << 'current character is ' *key* << ' and occurs << *val* << ' times.' << nl.
]

Где que - это sortedCollection, которая сортирует словарь по значению.

Myцель следующая: скажем, que has: [$a:20, $e:100] где первая буква - ключ словаря, а вторая цифра - значение словаря.Мой вывод должен выглядеть примерно так:

current character is a and occurs 20 times. current character is e and occurs 100 times.

Я не уверен, как получить a или ключ в словаре, поскольку ключи произвольны.

1 Ответ

0 голосов
/ 12 ноября 2018

Предполагая, что 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 и посмотреть, подходит ли он для вашего случая. Я не могу сказать по ссылке, как именно его возвращенная коллекция структурирована, поэтому я не буду предоставлять вам угаданный пример кода.

...