【问题标题】:Match and Replace Ruby Array according to dictionary根据字典匹配和替换 Ruby 数组
【发布时间】:2012-03-01 06:55:38
【问题描述】:

我有两个数组。

第一个是一组键:

[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"]]

如何将第一个数组的键替换为第二组的值?如果没有找到,用nil替换key?

【问题讨论】:

    标签: ruby arrays hash dictionary key-value


    【解决方案1】:
    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]
    

    【讨论】:

      【解决方案2】:

      您想在哈希中进行查找:

      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] }
      

      【讨论】:

      • 太棒了!没想到这么简单!
      【解决方案3】:

      您可以使用哈希(而不是数组数组)来存储您的字典。 这是 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 遍历您的数据数组并用关联的值替换每个键。这个 nil 是使用哈希的副作用

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

      【讨论】:

        猜你喜欢
        • 2017-06-03
        • 2015-10-30
        • 2020-08-27
        • 1970-01-01
        • 2020-09-14
        • 2012-07-25
        • 1970-01-01
        • 2020-09-27
        • 2014-11-24
        相关资源
        最近更新 更多