【问题标题】:Populate ruby Array1 with Array2 String element if and only if Array2 element matches Hash value(not key)当且仅当 Array2 元素匹配哈希值(非键)时,使用 Array2 字符串元素填充 ruby​​ Array1
【发布时间】:2010-12-26 07:48:21
【问题描述】:

我有一个红宝石哈希:

VALS = { :one => "One", :two => "Two" }

还有一个数组:

array2 = ["hello", "world", "One"]

问题:如何填充一个新的 array1 以便它只提取 array2 中与 VALS 中的值完全匹配的任何值?

例如,我试过:

array2.each_with_index do |e,i| 
array1 << e if VALS[i] ~= e
end

与其他东西一起,没有工作。菜鸟。

谢谢


太棒了!但是当我尝试时:

p array.select { |i| hash.has_value? i ? array[i+1] : "foo"}

我遇到了无法转换 fixnum 错误。我一定是错过了什么。

【问题讨论】:

    标签: ruby arrays hash scope nested-loops


    【解决方案1】:

    如果两个集合都很大,使用嵌套循环会非常慢。最好将内容视为集合:

    array1 = VALS.values & array2
    print array1
    

    输出:

    One
    

    【讨论】:

    • 不知道 & 运算符作为数组的集合交集。每天学习新东西:) +1
    • hmmm... 也不需要'set'也可以工作.. 从来没有想过!但是如果我想获得与第 i 个元素匹配的数组的第 i + 1 个元素呢?
    【解决方案2】:

    这里有一个选项:

    hash = { :one => "One", :two => "Two" }
    array = ["hello", "world", "One"]
    
    p array.select { |i| hash.has_value? i }
    # >> ["One"]
    

    【讨论】:

    • 我不建议将i 用作表示数组成员的块参数。我只会用它来表示索引号。
    【解决方案3】:

    知道了!

    array.select do |i|
      if VALS.has_value? i
        result << array[array.index(i)+1]
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多