見出し画像

プログラム入門(⑫リスト・配列)

今回は「プログラム入門⑧顧客リスト」で簡単に解説したプログラムで作成するリストについて詳しく解説します

まずはおさらい

ファイル ➔ 新しいテキストファイル ➔ test12.js

a = [1, 2, 3, 4, 5]
console.log(a)

以下のように表示されます。簡単なリストの作成です

(5) [1, 2, 3, 4, 5]

リストの1番目の取り出し方法はブラケット=[]で何番目かを指定します

a = [1, 2, 3, 4, 5]
console.log(a[0])

1番目の「1」が表示されました

1

プログラム・リストの1番目はゼロから始まります
1番目=0
2番目=1
3番目=2

リストの数

リストの中の個数の取得方法(リストの長さ、大きさという事が多いです)

a = [1, 2, 3, 4, 5]
console.log(a.length)

↓5個入っているので「5」と表示されました

5

繰り返しプログラム

a = [1, 2, 3, 4, 5]
for(b of a){
    console.log(b)
}

↑実は「プログラム入門⑧顧客リスト」で解説した繰り返し文は比較的簡単な方法を紹介しました

↓5回繰り返すプログラムの例です

for(i=0; i < 5; i++){
    console.log(i)
}

↓0〜4 まで表示されます

0
1
2
3
4

解説

for の括弧内に繰り返すための始まり(初期化)、終了条件、繰り返し処理を記述します。それぞれは ; =セミコロンで区切ります。

  • 初期化
    繰り返し処理が始まる前に実行される
    i=0 なので i はゼロから開始します

  • 終了条件
    繰り返しが終わる為の条件です
    i < 5 なので i が 5未満の時繰り返されます

  • 繰り返し
    繰り返しが実行される度に呼び出されます
    i++ はひとつずつ増やす
    (↑は右と同等になります i += 1 または  i = i + 1 )

iはゼロからはじまり
iはひとつずつ増え
5 未満になるまで繰り返します

なので結果が 0〜4 までの数字が表示されます

リストを繰り返し処理

上記までの説明を踏まえてリストを繰り返す処理を作成してみます

a = [1, 2, 3, 4, 5]
for(i =0; i < a.length; i++){
    b = a[i]
    console.log(b)
}

ポイントは、リストの個数は a.length=5。
プログラムではリストの1番目=0になる。
リストから◯番目の取得方法は ブラケット=[]を使う。

リストの中にリスト

リストの中にリストを入れる事ができます。
(2次元配列と呼びます)

a = [1, 2, 3, 4, 5]
a[0] = [1, 2, 3, 4, 5]
console.log(a)

↑いつものとおり1〜5まであるリストを作成した後に
1番目=[0]にリストを入れました

結果は↓のように表示されます

[ [ 1, 2, 3, 4, 5 ], 2, 3, 4, 5 ]

環境によっては [ Array(5), 2, 3, 4, 5 ] になるかもしれませんが間違えではありません

1つずつ確認すると

a = [1, 2, 3, 4, 5]
a[0] = [1, 2, 3, 4, 5]

for(i =0; i < a.length; i++){
    b = a[i]
    console.log(b)
}

↓のようになります

[ 1, 2, 3, 4, 5 ]
2
3
4
5

値を変更して違いを確認してみます

a = []
a[0] = [1, 2, 3,]
a[1] = [4, 5, 6,]
a[2] = [7, 8, 9,]

for(i =0; i < a.length; i++){
    b = a[i]
    console.log(b)
}

↑ 一行目の a=[] でゼロ個のリストを作成し
順番に 1,2,3 4,5,6 7,8,9 と追加しました

[ 1, 2, 3 ]
[ 4, 5, 6 ]
[ 7, 8, 9 ]

↑電話の番号のような表示になりました。

a = []
a[0] = ["◯", "✕", "✕",]
a[1] = ["✕", "◯", "✕",]
a[2] = ["✕", "✕", "◯",]

for(i =0; i < a.length; i++){
    b = a[i]
    console.log(b)
}

↓3並べのような表示になりました

[ '◯', '✕', '✕' ]
[ '✕', '◯', '✕' ]
[ '✕', '✕', '◯' ]

エクセルの表に見た目が近いと思いましたか?

二次元配列でエクセルデータを作成する

このデータ形式は縦、横=行、列のデータの管理にとても向いています
先程のプログラムを少し修正してエクセルデータを作成してみましょう

a = []
a[0] = ["名前", "年齢", "性別",]
a[1] = ["田中", "20", "男性",]
a[2] = ["鈴木", "19", "女性",]

for(i =0; i < a.length; i++){
    b = a[i]
    console.log(b)
}

[ '名前', '年齢', '性別' ]
[ '田中', '20', '男性' ]
[ '鈴木', '19', '女性' ]

エクセルの表に見えてきました

エクセルのデータを作成するにはカンマ区切りにする必要があります
Node.js=javascriptにはリストをカンマ区切りにする便利な関数が用意されています。

リスト.join(連結文字) を使います

a = [1, 2, 3, 4, 5]
b = a.join("")
console.log(b)

12345

↑空文字で連結されました
a = [1, 2, 3, 4, 5]
b = a.join("-")
console.log(b)

1-2-3-4-5

↑ハイフンで連結されました
a = [1, 2, 3, 4, 5]
b = a.join(",")
console.log(b)

1,2,3,4,5

↑カンマ区切りのテキストを作成できました


問題

二次元配列を使用してエクセルファイルを作成してみましょう
ヒント:
・横=列はリスト.join(",") を使ってつなげる
・縦=行は改行=\n でつなげる

fs = require("fs")

a = []
a[0] = ["名前", "年齢", "性別",]
a[1] = ["田中", "20", "男性",]
a[2] = ["鈴木", "19", "女性",]

text = ""
for(i =0; i < a.length; i++){
    b = a[i]
    text += b.join(",")
    text += "\n"
}

fs.writeFileSync("test12_output.csv", text)

正解は複数あると思います。どんな形でも問題ないでしょう。
いくつか例を下にあげます。結果はどれも同じになります。

fs = require("fs")

a = [
    ["名前", "年齢", "性別",],
    ["田中", "20", "男性",],
    ["鈴木", "19", "女性",],
]

text = ""
for(i =0; i < a.length; i++){
    b = a[i]
    text += b.join(",")
    text += "\n"
}

fs.writeFileSync("test12_output.csv", text)

↑ 二次元配列の作成をこんな風にする事もできます

fs = require("fs")

a = [
    ["名前", "年齢", "性別",],
    ["田中", "20", "男性",],
    ["鈴木", "19", "女性",],
]


for(i =0; i < a.length; i++){
    b = a[i]
    a[i] = b.join(",")
}
text = a.join("\n")

fs.writeFileSync("test12_output.csv", text)

改行も joinを使ってつなげる事もできます

いろんなプログラムの形を試しては戻してまた試し、見やすいプログラムを作る事がポイントです。はじめは自分が見やすければ良いいと思います。

この記事が気に入ったらサポートをしてみませんか?