長さの異なる2つの配列があります。それらをハッシュに入れて、要素をできるだけ均等に分散させたいと思います。
編集:申し訳ありませんが、私は十分な入力を提供していないことに気づきました。「可能な限り均等に」とは、次のことを意味します。
array1には、常にarray2よりも多くの要素があります。
array2要素は文字列です。最小単位は単語です。
UPATED GOAL 結果のハッシュについて、平均的な単語と数値の比率(すべての要素array2からarray1.join( "").split( ""))に基づいてキーに値を分散させたい。文字列の整合性を損なうことなく、可能な限り平均に近い数値を文字列に分散させるためです。結果を次のように表示することもできます。
result = {"The older son of a woman" =>[320, 321, 322, 323],...}
混乱して申し訳ありませんが、アプリケーションの目的によって、これを逆に考えさせられたと思います。
以下のサンプルコードが機能する場合もありますが、機能しない場合もあります。
array1.clear
array2.clear
array11 = [336, 337, 338, 339, 340, 342, 344, 345, 346, 347, 348]
array22 = ["New research", "suggests that hoarders have unique patterns", "of brain activity", "when faced with making decisions", "about their possessions."]
array1 = [320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 331, 332, 333, 334]
array2 = ["The older son of a woman", "killed at Sunday's mass shooting", "in Wisconsin said she was shot just", "after completing prayers."]
def hash_from_arrays(array1, array2)
hash = Hash.new{|h,k| h[k] = [] }
arr_ratio = arr1_to_arr2_ratio(array2, array1)
start = 0
last_arr1_to_arr2 = Float(Float(array2.last.split(" ").length)*Float(arr_ratio)).floor
array1.each_with_index do | element, index|
arr1_for_arr2_ratio = Float(Float(array2[0].split(" ").length)*Float(arr_ratio)).floor
hash[element] = array2[0]
if arr1_for_arr2_ratio + start == index && array2.length > 1
array2.shift
start = index
end
end
return hash
end
def arr1_to_arr2_ratio(array1, array2)
word_count = 0.0
array1.each{|string| word_count = word_count + string.split(" ").length}
result = Float(array2.length) / word_count
return result
end
hash_from_arrays(array1, array2)
=> {320=>"The older son of a woman", 321=>"The older son of a woman", 322=>"The older son of a woman", 323=>"The older son of a woman", 324=>"The older son of a woman", 325=>"killed at Sunday's mass shooting", 326=>"killed at Sunday's mass shooting", 327=>"killed at Sunday's mass shooting", 328=>"in Wisconsin said she was shot just", 329=>"in Wisconsin said she was shot just", 331=>"in Wisconsin said she was shot just", 332=>"in Wisconsin said she was shot just", 333=>"after completing prayers.", 334=>"after completing prayers."}
編集コードを更新しました。両方のアレイで機能するようになりました。一般的には機能すると思います...誰かがより良い解決策を提案できれば、それは素晴らしいことです。