8

2 つの配列があり、それぞれにキーは同じで値が異なる任意の数のハッシュが含まれています。

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値が特定のタイプであるすべてのハッシュの最大値を見つけるにはどうすればよいですか?

たとえば、:value_lengtha:typeが 0 のハッシュの最大値は 4:value_lengthです。a が 1 のハッシュの最大値は:type8 です。

私はこの問題に頭を悩ませることができません。

4

4 に答える 4

13

簡単な方法:

all = ArrayA + ArrayB # Add them together if you want to search both arrays.
all.select{|x| x[:type] == 0}
   .max_by{|x| x[:value_length]}

そして、それを再利用したい場合は、関数を作成するだけです:

def find_max_of_my_array(arr,type)
  arr.select{|x| x[:type] == type}
     .max_by{|x| x[:value_length]}
end

p find_max_of_my_array(ArrayA, 0) # => {:value=>"abcd", :value_length=>4, :type=>0}
于 2013-10-08T20:32:42.030 に答える
0

あなたが望む出力が何であるかは完全にはわかりませんが、これを試してください。配列全体ではなく、ArrayA[x][:type] == ArrayB[x][:type]最大値を探しているように、配列が順序付けられていると思います。(ArrayA[x], ArrayB[x])そうでない場合は、最初に 2 つの配列を連結する他のソリューションがうまく機能します。

filtered_by_type = ArrayA.zip(ArrayB).select{|x| x[0][:type] == type }
filtered_by_type.map {|a| a.max_by {|x| x[:value_length] } }
于 2013-10-08T20:36:48.580 に答える
0

種類で絞り込んで並べ替えることもできます。そうすれば、最小、2 番目に大きいなどを取得できます。

all = ArrayA + ArrayB

all = all.select { |element| element[:type] == 1 }
        .sort_by { |k| k[:value_length] }.reverse

puts all[0][:value_length]
#8

puts all[all.length-1][:value_length]
#3
于 2016-03-29T00:35:41.647 に答える