2016-08-08 25 views
2

私は化学研究プロジェクトに取り組んでいます。さまざまな角度でファイルを作成する必要があります。私は、次のすべての組み合わせをしたい:複数の配列からの要素の組み合わせ

angle1 can be from [0, -36, -72, -108, -144, -180] 
angle2 can be from [-180, -108, -36] 
angle3 can be from [0, -36, -72, -108, -144, -180] 
angle4 can be from [-180, -108, -36] 

私は、このためのいくつかのRubyのコードを書きましたが、それは私に期待される組み合わせの数の半分だけを与えているように見えます。私のプログラミングスキルはあまり良くないので、誰かが私が間違っていることを教えてもらえないかと思っていました。

は、あなたが提供することができます任意の助けのためにどうもありがとうございます:

phi1 = [0, -36, -72, -108, -144, -180] 
psi1 = [-180, -108, -36] 

phi2 = [0, -36, -72, -108, -144, -180] 
psi2 = [-180, -108, -36] 

psi1.each do |a| 
    psi2.each do |b| 
    phi1.each do |c| 
     psi2.each do |d| 

     line1 = 'select' + "#{b}" + '}}' 
     line2 = 'select' + "#{a}" + '}}' 
     line3 = 'select' + "#{d}" + '}}' 
     line4 = 'select' + "#{c}" + '}}' 

     filename = "angles#{b}_#{a}_#{d}_#{c}" 
     puts filename 
     puts line1 
     puts line2 
     puts line3 
     puts line4 
     end 
    end 
    end 
end 

の予想される出力は、ファイル名はPHI1のすべての組み合わせとなり、PSI1、PHI2、PSI2「ファイル名を置く」になります。私はそれが324回を置くと期待していますが、それは162回だけです。

+0

あなたの要件は不明です。期待どおりの出力を追加できますか? –

答えて

3

Array#productをここで使用してください。

phi1 = [0, -36, -72, -108, -144, -180] 
psi1 = [-180, -108, -36] 
phi2 = [0, -36, -72, -108, -144, -180] 
psi2 = [-180, -108, -36] 

phi1.product(psi1, phi2, psi2).each do |arr| 
    puts "angles#{ arr.join("_") }" 
    arr.each { |angle| puts "select #{angle}" } 
end 

angles0_-180_0_-180 
select 0 
select -180 
select 0 
select -180 
angles0_-180_0_-108 
select 0 
select -180 
select 0 
select -108 
... 
angles-180_-36_-180_-108 
select -180 
select -36 
select -180 
select -108 
angles-180_-36_-180_-36 
select -180 
select -36 
select -180 
select -36 

phi1.product(psi1, phi2, psi2).count 
    #=> 324 
0

私はこのようなことが欲しいと思います。あなたの問題は、同じ配列の値を上書きしたときにその値を上書きしたことです。

phi1 = [0, -36, -72, -108, -144, -180] 
psi1 = [-180, -108, -36] 

phi2 = [0, -36, -72, -108, -144, -180] 
psi2 = [-180, -108, -36] 

問題を解決する必要がある2番目のアレイの名前を変更した場合、私はあなたが望むと思うものを入力しました。

phi1 = [0, -36, -72, -108, -144, -180] 
psi3 = [-180, -108, -36] 

phi2 = [0, -36, -72, -108, -144, -180] 
psi4 = [-180, -108, -36] 

psi1.each do |a| 
    psi2.each do |b| 
    phi3.each do |c| 
     psi4.each do |d| 

     line1 = 'select' + "#{b}" + '}}' 
     line2 = 'select' + "#{a}" + '}}' 
     line3 = 'select' + "#{d}" + '}}' 
     line4 = 'select' + "#{c}" + '}}' 

     filename = "angles#{b}_#{a}_#{d}_#{c}" 
     puts filename 
     puts line1 
     puts line2 
     puts line3 
     puts line4 
    end 
    end 
    end 
end 
+0

私は私がそれらを2回宣言しているのを見ているのか分かりません。私はphi1とpSi1、そしてphi2とPSi2を宣言しています。 1つはphiで、もう1つはpsiなので、私はそこでうまくいけませんか? :S –

+0

あなたは正しいです、それは非常によく似ていると申し訳ありません、私はそれを逃した。私は、予想された、そして実際の出力が何であるか推測します。それは大丈夫だろうと思われる –

0

は、なぜあなたは二回phi1phi2を宣言していますか?私は次のようなことをします:

phi1 = [0, -36, -72, -108, -144, -180] 

phi2 = [-180, -108, -36] 

phi3 = [0, -36, -72, -108, -144, -180] # this one now ends in 3 

phi4 = [-180, -108, -36] # this one now ends in 4 

# I declared a new, unique array for every set of possible 
# angle values 

phi1.each do |a| 
    phi2.each do |b| 
    phi3.each do |c| 
     phi4.each do |d| #I also made it so the for loops are for each individual phi 
         #array. 

     line1 = 'select' + "#{b}" + '}}' 
     line2 = 'select' + "#{a}" + '}}' 
     line3 = 'select' + "#{d}" + '}}' 
     line4 = 'select' + "#{c}" + '}}' 

     filename = "angles#{b}_#{a}_#{d}_#{c}" 
     puts filename 
     puts line1 
     puts line2 
     puts line3 
     puts line4 
     end 
    end 
    end 
end 

私はこれが助けてくれることを願っています。

+0

私はそれらを2回宣言しているか分かりません。私はphi1とpSi1、そしてphi2とPSi2を宣言しています。 –

関連する問題