質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

1889閲覧

ruby多次元配列の応用方法について

probaseball

総合スコア113

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/06/02 07:30

編集2015/06/02 13:29

多次元配列の質問について質問させていただきます。

CSVを読み込んだあとの多次元配列の比較方法はどうすればよろしいですか?

やりたいことは、問題と答えのCSVを読み込んで、比較し、答えを別の配列に入れたいと思っています。

片方は選択問題の回答のCSV、もう片方は答案のCSVをよみこみ比較して
あってれば○、まちがってれば×を配列にいれ、回答のCSVと○×の配列をCSVで書き込みしたいと思っております

CSVの中身(回答)は・・・①
[ID,NAME,OLD,q1,q2・・・・q50]配列要素0
[1,ピーター,43,・・・・・]配列要素1
[2,ニール,23,・・・・]配列要素2
[・・・・]配列要素3

CSVの中身(答案)・・・②
ア、イ、ウ、エ・・・・

です

そこでプログラムを組んでみたのですが、エラーがおきます。
#question_dates・・・①
#answer_dates・・・②
for 変数1 in 1..人の数(複数) 1は項目蘭のためです
for変数2 in 0..問題数(この場合は50)
if(question_dates[変数1][変数2] == answer_dates[変数2])
correct_or_incorrect[変数1][変数2] << ["○"]
else
correct_or_incorrect[変数1][変数2]<< ["×"]
end
end
end

エラーとしては、ndefined method `[]' といわれます
どうしたらいいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

以下で質問の答えになっているでしょうか?

lang

1#!/usr/bin/ruby 2require 'pp' 3 4question_dates = [ 5 [1,"一郎",43, "ア","イ","ウ","エ" ], 6 [2,"二郎",44, "ア","イ","ウ","ア" ], 7 [3,"三郎",45, "ア","イ","ア","エ" ], 8 [4,"四郎",46, "ア","イ","ウ","エ" ] 9] 10 11answer_datas = [ "dummy", "dummy", "dummy","ア","イ","ウ","エ" ] 12 13correct_or_incorrect = [ 14 [1,"一郎",43 ], 15 [2,"二郎",44 ], 16 [3,"三郎",45 ], 17 [4,"四郎",46 ] 18] 19 20 21for i in 0..3 22 for j in 3..6 23 if( question_dates[i][j] == answer_datas[j]) 24 correct_or_incorrect[i] << "○" 25 else 26 correct_or_incorrect[i] << "×" 27 end 28 end 29 30end 31 32pp correct_or_incorrect

結果
[[1, "一郎", 43, "○", "○", "○", "○"],
[2, "二郎", 44, "○", "○", "○", "×"],
[3, "三郎", 45, "○", "○", "×", "○"],
[4, "四郎", 46, "○", "○", "○", "○"]]

投稿2015/06/02 14:00

編集2015/06/02 14:44
frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

> ... 比較し、答えを別の配列 ...

具体的に どのような比較をし、どのように結果を保持するかを決めることがプログラミングです。
多次元の前に 単なる 2 つの数字、2つの数字の配列の場合で考えたとしても、
比較方法、結果の保持にはいろいろな案があります。

例: 2 つの数字 x, y の比較。
A. x == y で比較し、等しいなら true, 等しくなければ false で結果を保存する。
B. (x - y) を比較結果として保存する。
C. abs(x - y) < delta の true, false 値を比較結果とする。
(浮動小数点同士の比較では == でなく、 ある程度の幅を持って比較するということがあります)

例; 2 つの配列の比較

  1. (1,2, 3), (1,2,4) ==> (0,0,1) のように各項ごとの 差分の配列で保持する。
    (1,2) と (1,2,3) のときはどうする ? ....

投稿2015/06/02 13:01

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

これだけ抽象的な質問だと答えにくいですね。
eachで順番に処理していくというくらいでしょうか。

もうすこしやりたいことを具体的に書けないでしょうか?
入力が何で出力が何とか。

投稿2015/06/02 12:34

編集2015/06/02 13:08
otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

インプットのCSVファイルは、どんなファイルですか?
また、どんなアウトプットが欲しいですか?

投稿2015/06/02 10:28

frogman

総合スコア129

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問