わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

forはなるべく使わない

配列の各要素を出力するには

添付ファイルを見ました.ファイルを行ごとに読み出して,行末を取り除きながら配列に格納したのち,動作確認用に中身を出力している処理について,

for item in array
  print item + "\n"
end

と書いていますが,Rubyらしくありません.
これは

puts array

としてください.putsメソッドには,配列や,複数の要素を引数に与えることができます.引数に応じた改行処理も行ってくれますので,「\n」は不要です.

ファイルに出力するには

ファイル出力のコードも見ました.コメントアウトが多数あって,苦心の跡もうかがえますが,以下のように書くのが基本です.

open(file_name, "w") do |f_out|
  f_out.puts array
end

Cのfor/whileループ,Rubyでは

Cの繰り返し処理はforまたはwhileを使用しますが,Rubyでは必ずしもそれらの制御構造を使いません.以下のコード例を知っておくといいでしょう.

/* 0から9まで */
int i;
for (i = 0; i < 10; i++) {
  printf("%d\n", i);
}
# 0から9まで(その1)
10.times do |i|
  puts i
end

# 0から9まで(その2)
0.upto(9) do |i|
  puts i
end

# 0から9まで(その3)
puts (0...10).to_a
/* ファイルを開いて1文字単位で読み出す */
FILE *fp;
int c;
if ((fp = fopen("input.txt", "r")) == NULL) {
  printf("error: fopen\n");
  exit(1);
}
while ((c = fgetc(fp)) != EOF) {
  printf("%c", c);
}
fclose(fp);
# ファイルを開いて1行単位で読み出す.改行も保持される
array = []
open("input.txt") do |f_in|
  f_in.each_line do |line|
    array << line
  end
end

# ファイルを開いて読み出し,行ごとの配列にする.改行は除去される
array = open("input.txt").read.split(/\n/)
/* 文字列配列の各要素(文字列)およびバイトサイズを出力する */
/* %zuについて: https://qiita.com/7of9/items/ca5ebf9b7861acbcf656 */
char *array[50];
/* arrayの各要素に文字列を参照させる */
int i;
for (i = 0; i < 50; i++) {
  printf("%s (%zu)\n", array[i], strlen(array[i]));
}
# 文字列配列の各要素(文字列)およびバイトサイズを出力する
array = []
# arrayに値を格納する
puts array.map { |s| "%s (%d)" % [s, s.bytesize] }

なにこれ

夏休み期間中に学生から来たメールに対する返信を,アレンジしたものです.