Может быть, не самый лучший способ:
Сначала я строю набор со всеми возможными сопоставлениями месяца для индексации. Я определяю списки и обрабатываю их с mapIndexed
, чтобы получить значение индекса. После этого я сплющил их, чтобы получить набор с Pair<String, Int>
val monthsToIndex by lazy {
val lists = listOf(
arrayOf("january", "february", "jumper"),
arrayOf("Januari", "Februari", "Maret")
);
lists.map { it.mapIndexed { i, s -> s to i } }.flatten().toSet()
};
Поиск теперь является find
в этом наборе + нулевая проверка, чтобы выдать исключение:
private fun getMonth(monthText: String): Int {
return monthsToIndex.find { it.first == monthText }?.second ?: throw Exception("Not found")
}
Преимуществом такого подхода будет очень сжатое место, где вы инициализируете все значения - и только один раз.
Обновление:
Вы также можете преобразовать это в карту, как предложил Фрэнк Неблунг - это определенно ускорит поиск:
val monthsToIndex by lazy {
val lists = listOf(
arrayOf("january", "february", "jumper"),
arrayOf("Januari", "Februari", "Maret")
);
lists.map { it.mapIndexed { i, s -> s to i } }.flatten().toMap()
};
private fun getMonth(monthText: String): Int {
return monthsToIndex[monthText] ?: throw Exception("Not found")
}