0

假设我有两个数组,每个数组都包含任意数量的具有相同键但值不同的散列:

ArrayA = [{value: "abcd", value_length: 4, type: 0},{value: "abcdefgh", value_length: 8, type: 1}]
ArrayB = [{value: "ab", value_length: 2, type: 0},{value: "abc", value_length: 3, type: 1}]

尽管有任何数字,但散列的数量总是相等的。

我怎样才能为某种类型的每个哈希找到最大的 :value_length?

例如, :type 为 0 的哈希的最大 :value_length 将是 4。 :type 为 1 的哈希的最大 :value_length 将是 8。

我只是无法解决这个问题。

如果我能以我上面描述的方式,以数据库请求式的方式得到答案,那就太好了。

目前,我正在尝试这样做:

# place all :value_length values in an array
flat_A = ArrayA.flatten.map{|h| h[:value_length]} #=> [4,8]
flat_B = ArrayB.flatten.map{|h| h[:value_length]} #=> [2,3]

但我不知道如何比较单独数组的并行结果。即(4 与 2、8 与 3)

loop_A = 0
loop_B = 0

flat_A.each do |a|
    flat_B each do |b|
        if loop_A == loop_B
            comparisson_array << a << b

            #something like this I just can't think!!!!             

            comparisson_array.index comparisson_array.max #=> 1
        end
        loop_B += 1
    end
    loop_A += 1 
end
4

1 回答 1

0

使用Array#zip

ArrayA = [{value_length: 4, type: 0},{value_length: 8, type: 1}]
ArrayB = [{value_length: 2, type: 0},{value_length: 3, type: 1}]
ArrayA.zip(ArrayB).map {
  |a, b| [a[:value_length], b[:value_length]].max
} # => [4, 8]

注意:我假设ArrayA并按ArrayB.type

于 2013-10-08T17:05:07.867 回答