Подберите и замените Ruby Array в соответствии со словарем - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть два массива.

Первый набор ключей:

[476126287, 373653306, 294631223, 14179684, 257968797, 124332158, 315977804, 416828937, 406598349, 397492006, 36353099, 395888209, 13870552, 381624315, 14216932, 40042684, 346236824, 222538115, 256661100, 89384897, 26294306, 264885135, 259371103, 246437428, 21024561, 215167635, 201236316, 178544572, 15290498, 23330844, 90943456, 103080311, 31276046, 18377430, 48403129, 18435047, 89850690]

Второй набор - большой (словарь) пар ключ-значение.

[[476126287, "BURANE"], [373653306, "PENAHI"], [294631223, "CIWUCU"], [14179684, "TOHAPU"], [257968797, "SUZEJU"], [124332158, "DUPAKE"], [315977804, "MIZEJU"], [416828937, "ZOPIHA"], [406598349, "YAYOJI"], [397492006, "CISOCI"], [36353099, "TAWIHU"], [395888209, "SUCOVE"], [13870552, "TACIYA"], [40042684, "WEBUWA"], [346236824, "WOPESI"], [222538115, "KECUGA"], [256661100, "DUVUVA"], [89384897, "FOZIJA"], [26294306, "JEFOWA"], [264885135, "TEYABA"], [259371103, "NOREDA"], [246437428, "JEDUJE"], [21024561, "WABITO"], [215167635, "LOJORE"], [201236316, "SUMESE"], [178544572, "GEYOGE"], [15290498, "TAROBA"], [23330844, "TAFUBA"], [90943456, "HISABE"], [103080311, "GAVISA"], [31276046, "KIFAKA"], [18377430, "YIYAWU"], [48403129, "VUTIPE"], [18435047, "WIWUZO"], [89850690, "RIPIFO"]]

Как заменить ключи первого массива значениями второго набора?А если он не найден, заменить ключ на ноль?

Ответы [ 3 ]

4 голосов
/ 08 февраля 2012

Вы хотите выполнить поиск в хэше:

arr1 = [476126287, 373653306, 294631223, 14179684, 257968797, 124332158, 315977804, 416828937, 406598349, 397492006, 36353099, 395888209, 13870552, 381624315, 14216932, 40042684, 346236824, 222538115, 256661100, 89384897, 26294306, 264885135, 259371103, 246437428, 21024561, 215167635, 201236316, 178544572, 15290498, 23330844, 90943456, 103080311, 31276046, 18377430, 48403129, 18435047, 89850690]
arr2 = [[476126287, "BURANE"], [373653306, "PENAHI"], [294631223, "CIWUCU"], [14179684, "TOHAPU"], [257968797, "SUZEJU"], [124332158, "DUPAKE"], [315977804, "MIZEJU"], [416828937, "ZOPIHA"], [406598349, "YAYOJI"], [397492006, "CISOCI"], [36353099, "TAWIHU"], [395888209, "SUCOVE"], [13870552, "TACIYA"], [40042684, "WEBUWA"], [346236824, "WOPESI"], [222538115, "KECUGA"], [256661100, "DUVUVA"], [89384897, "FOZIJA"], [26294306, "JEFOWA"], [264885135, "TEYABA"], [259371103, "NOREDA"], [246437428, "JEDUJE"], [21024561, "WABITO"], [215167635, "LOJORE"], [201236316, "SUMESE"], [178544572, "GEYOGE"], [15290498, "TAROBA"], [23330844, "TAFUBA"], [90943456, "HISABE"], [103080311, "GAVISA"], [31276046, "KIFAKA"], [18377430, "YIYAWU"], [48403129, "VUTIPE"], [18435047, "WIWUZO"], [89850690, "RIPIFO"]]
h = Hash[arr2]
arr1.map { |el| h[el] }
0 голосов
/ 09 февраля 2012
ar1 = [476126287, 373653306, 294631223, 14179684, 257968797, 124332158, 1].shuffle

ar2 = [[476126287, "BURANE"], [373653306, "PENAHI"], [294631223, "CIWUCU"], [14179684, "TOHAPU"], [257968797, "SUZEJU"], [124332158, "DUPAKE"]]

Как говорили другие, о чем вы должны думать, так это о Хеш. Тем не менее, Array имеет метод assoc, который подходит для небольших данных / одноразовых поисков:

ar1.map{|el| ar2.assoc(el)}
#=> [[476126287, "BURANE"], [373653306, "PENAHI"], [294631223, "CIWUCU"], [14179684, "TOHAPU"], [257968797, "SUZEJU"], [124332158, "DUPAKE"], nil]
0 голосов
/ 08 февраля 2012

вы можете использовать Hash (вместо массива) для хранения вашего словаря.это правильная структура данных для пар ключ-значение в ruby.

data = [476126287, 373653306, 294631223, 14179684, 257968797, 124332158, 315977804, 416828937, 406598349, 397492006, 36353099, 395888209, 13870552, 381624315, 14216932, 40042684, 346236824, 222538115, 256661100, 89384897, 26294306, 264885135, 259371103, 246437428, 21024561, 215167635, 201236316, 178544572, 15290498, 23330844, 90943456, 103080311, 31276046, 18377430, 48403129, 18435047, 89850690]

translation =  Hash[  476126287 => "BURANE", 373653306 => "PENAHI", 294631223 => "CIWUCU", 14179684 => "TOHAPU", 257968797 => "SUZEJU", 124332158 => "DUPAKE", 315977804 => "MIZEJU", 416828937 => "ZOPIHA", 406598349 => "YAYOJI", 397492006 => "CISOCI", 36353099 => "TAWIHU", 395888209 => "SUCOVE", 13870552 => "TACIYA", 40042684 => "WEBUWA", 346236824 => "WOPESI", 222538115 => "KECUGA", 256661100 => "DUVUVA", 89384897 => "FOZIJA", 26294306 => "JEFOWA", 264885135 => "TEYABA", 259371103 => "NOREDA", 246437428 => "JEDUJE", 21024561 => "WABITO", 215167635 => "LOJORE", 201236316 => "SUMESE", 178544572 => "GEYOGE", 15290498 => "TAROBA", 23330844 => "TAFUBA", 90943456 => "HISABE", 103080311 => "GAVISA", 31276046 => "KIFAKA", 18377430 => "YIYAWU", 48403129 => "VUTIPE", 18435047 => "WIWUZO", 89850690 => "RIPIFO" ]

, затем используйте map для перебора массива данных и замены каждого ключа на соответствующее значение.этот ноль является побочным эффектом использования Hash

print data.map{|key| translation[key]}
...