Непонятно, как работает параметр в блоке sumBy (Kotlin) - PullRequest
1 голос
/ 23 января 2020

Это ответ на вызов Codewars, в соответствии с которым в качестве параметра передается серия слов, и возвращается слово с наибольшим количеством баллов, причем каждая буква получает соответствующую позицию алфавита.

str.split(' ').maxBy{ it.sumBy{ it - 'a' + 1 } }!!

I понять, что здесь происходит, за исключением "- 'a'" в блоке sumBy.

Может кто-нибудь объяснить мне это?

1 Ответ

2 голосов
/ 23 января 2020

Это старый трюк, который использует тот факт, что большинство (все?) Кодировки символов имеют буквы Engli sh в алфавитном порядке c и последовательные. Вот пример таблицы ASCII .

Как видите, 'a' имеет заданное числовое значение. Это значение, которое вы получите, если преобразовать символ в число в Kotlin (что неявно делается в предоставленном вами коде). Если вы вычтете его (it - 'a'), вы получите 0 для 'a', 1 для 'b', 2 для 'c' и так далее. Это их позиция алфавита со смещением, равным единице, поэтому есть +1, который фиксирует это смещение, поэтому теперь it - 'a' + 1 возвращает число, такое как 'a' = 1, 'b' = 2, et c. ..

Обратите внимание, что этот трюк не будет работать для не-Engli sh алфавитов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...