Самый простой способ - использовать хеш. Например: seat['A'][1] = value
Но если по какой-то причине вам действительно нужен массив, то метод, который вы описываете, является самым простым. Предполагая, что строка строки представляет собой один символ от «A» до «Z», вы можете сделать это, используя row_string[0] - ?A
(или row_string[0] - ?A + 1
, если вы хотите, чтобы индекс начинался с 1, как в вашем примере). Для многосимвольной версии, где строка AA находится после строки Z, вы можете сделать это в 1.8.7 и новее:
row_num = row_string.bytes.inject(0) {|total, x| total = total * 26 + x - ?A + 1}
Возможно, вы захотите заранее записать строку строки, просто чтобы быть в безопасности.
В версии 1.8.6 и ниже String
не имеет метода bytes
. Вы можете сделать то же самое, выполнив:
row_num = 0
row_string.each_byte {|x| row_num = row_num * 26 + x - ?A + 1}