0

配列は、私が扱ったすべての言語で常に私の落とし穴でしたが、Rails で複数の項目の動的配列を作成する必要がある状況にあります (注 - これらはいずれもモデルに関連していません)。

簡単に言えば、配列の各要素は、単語、言語、英語への翻訳の 3 つの値を保持する必要があります。たとえば、私がやりたいことは次のとおりです。

myArray = Array.new

そして、いくつかの値を配列にプッシュしたいと思います (注 - 実際のコンテンツは別の場所から取得されます - モデルではありません - ここにあるようにハードコーディングするのではなく、ループを介して追加する必要があります):

myArray[0] = [["bonjour"], ["French"], ["hello"]]

myArray[1] = [["goddag"], ["Danish"], ["good day"]]

myArray[2] = [["Stuhl"], ["German"], ["chair"]]

次のように、各項目を 1 行にリストするループを作成したいと思います。

<ul>
<li>bonjour is French for hello</li>
<li>goddag is Danish for good day</li>
<li>Stuhl is German for chair</li>
</ul>

ただし、(a) 複数の値を 1 つの配列要素にプッシュする方法と、(b) ループして結果を表示する方法を理解するのに苦労しています。

残念ながら、私はまったく遠くまで行っていません。複数の値を単一の配列要素にプッシュする方法を理解できないようです (通常、[] ブラケットが出力に含まれますが、これは明らかに望ましくないため、表記エラーである可能性があります)。

代わりにハッシュを使用する必要がありますか?

現時点では、私は 3 つの別個の配列を持っています。これは私が常に行ってきたことですが、特に好きではありません。つまり、元の単語を保持する 1 つの配列、言語を保持する 1 つの配列、および言語を保持する最後の配列です。翻訳を保留します。それは機能しますが、これがより良いアプローチであると確信しています-うまくいけば!

ありがとう!

4

3 に答える 3

1

わかりました、CSV ファイルに必要な単語があるとしましょう:

# words.csv
bonjour,French,hello
goddag,Danish,good day
stuhl,German,chair

このプログラムでは、次のことができます。

words = []
File.open('words.csv').each do |line|
  # chomp removes the newline at the end of the line
  # split(',') will split the line on commas and return an array of the values
  # We then push the array of values onto our words array
  words.push(line.chomp.split(','))
end

このコードが実行された後、words 配列には 3 つの項目があり、各項目はファイルに基づく配列です。

words[0]  # => ["bonjour", "French", "hello"]
words[1]  # => ["goddag", "Danish", "good day"]
words[2]  # => ["stuhl", "German", "chair"]

次に、これらのアイテムを表示します。

puts "<ul>"
words.each do |word|
  # word is an array, word[0], word[1] and word[2] are available
  puts "<li>#{word[0]} is #{word[1]} for #{word[2]}</li>"
end
puts "</ul>"

これにより、次の出力が得られます。

<ul>
<li>bonjour is French for hello</li>
<li>goddag is Danish for good day</li>
<li>stuhl is German for chair</li>
</ul>

また、あなたはそれについて尋ねませんでしたが、次を使用して特定の配列の一部にアクセスできます。

words[0][1]  # => "French"

これは、words 配列の最初の (Ruby 配列は 0 から始まる) 要素を見たいということを Ruby に伝えています。Ruby はその要素 (["bonjour", "French", "hello"]) を見つけ、それも配列であることを確認します。次に、その配列の 2 番目の項目 ([1]) を要求すると、Ruby は文字列 "French" を返します。

于 2012-09-16T17:00:37.237 に答える
0

このようなことを意味しますか?

myArray.map{|s|"<li>#{[s[0],'is',s[1],'for',s[2]].join(" ")}</li>"}
于 2012-09-16T01:29:20.800 に答える
0

助けてくれてありがとう!アドバイスを参考に解決策を見つけました

この問題に出くわした他の人の利益のために、ここに私の除外されたコードがあります。注: テキスト、言語、翻訳という 3 つの変数を使用していますが、Jason が上で提案したように、これらを 3 つの個別の要素を持つ単一の配列に置き換えることができると思います。

コントローラー内 (コンテンツはループ経由で追加されています):

#loop start

my_array.push(["#{text}", "#{language}", "#{translation}"]) 

#loop end

ビューで:

<ul>

<% my_array.each do |item| %>

<li><%= item[0] # 0 is the original text %> is 
<%= item[1] # 1 is the language %> for 
<%= item[2] # 2 is the translation %></li>

<% end %>

</ul>

再度、感謝します!

于 2012-09-19T12:51:28.693 に答える