はじめに
今まで学んだ「変数」は、1つの箱に1つのものを入れていました。
でも、こんなときはどうしますか?
- クラス30人の名前を管理したい
- 買い物リストを作りたい
- ゲームの持ち物100個を記録したい
30個の変数を作る?それは大変!
そこで登場するのが「配列(はいれつ)」と「リスト」です!
配列・リストって何?
身の回りの「配列」
実は、私たちの周りには配列のようなものがたくさんあります。
📚 日常の中の配列
本棚:
- 1段目:マンガ
- 2段目:小説
- 3段目:教科書
- 4段目:図鑑
シューズボックス:
- 1番:運動靴
- 2番:上履き
- 3番:サンダル
- 4番:長靴
カレンダー:
- 1日、2日、3日...31日
出席番号:
- 1番:相川さん
- 2番:石田さん
- 3番:上田さん
配列は「番号付きのたくさんの箱」だと思ってください!
基本の使い方
配列を作る
// 果物の配列を作る
果物リスト = ["りんご", "みかん", "バナナ", "ぶどう", "いちご"]
// 数字の配列
テストの点数 = [85, 92, 78, 65, 90]
// 混ぜることもできる
いろいろ = ["太郎", 10, true, "算数", 3.14]
配列から取り出す
配列の中身は「番号」で取り出します。 注意:多くのプログラミング言語では、番号は0から始まります!
果物リスト = ["りんご", "みかん", "バナナ", "ぶどう", "いちご"]
// [0] [1] [2] [3] [4]
// 取り出す
最初の果物 = 果物リスト[0] // "りんご"
3番目の果物 = 果物リスト[2] // "バナナ"(0から数えて2)
最後の果物 = 果物リスト[4] // "いちご"
配列に追加・変更
// 最初の状態
買い物リスト = ["牛乳", "パン", "卵"]
// 追加する
買い物リスト.追加("お菓子")
// ["牛乳", "パン", "卵", "お菓子"]
// 変更する
買い物リスト[1] = "食パン" // "パン"を"食パン"に変更
// ["牛乳", "食パン", "卵", "お菓子"]
配列の便利な使い方
1. 配列の長さを調べる
クラスメイト = ["太郎", "花子", "次郎", "さくら", "健太"]
人数 = クラスメイト.長さ // 5
"クラスには" + 人数 + "人います"
2. 配列と繰り返しの組み合わせ
これが配列の真の力!
// 成績表
生徒の名前 = ["太郎", "花子", "次郎", "さくら", "健太"]
テストの点数 = [85, 92, 78, 95, 88]
// 全員分を表示
番号 を 0 から 4 まで繰り返す:
名前 = 生徒の名前[番号]
点数 = テストの点数[番号]
名前 + "さん:" + 点数 + "点"
// 結果
// 太郎さん:85点
// 花子さん:92点
// 次郎さん:78点
// さくらさん:95点
// 健太さん:88点
3. 配列の検索
好きな食べ物 = ["カレー", "ラーメン", "ハンバーグ", "寿司", "ピザ"]
探す食べ物 = "ラーメン"
見つかった = false
位置 = -1
番号 を 0 から (好きな食べ物.長さ - 1) まで繰り返す:
もし 好きな食べ物[番号] == 探す食べ物 なら
見つかった = true
位置 = 番号
繰り返しを終了
もし 見つかった == true なら
探す食べ物 + "は" + (位置 + 1) + "番目にあります"
そうでなければ
探す食べ物 + "は見つかりませんでした"
実践的な例
1. 買い物計算機
商品名 = ["りんご", "牛乳", "パン", "卵", "お菓子"]
値段 = [100, 200, 150, 250, 300]
個数 = [3, 1, 2, 1, 2]
合計金額 = 0
番号 を 0 から (商品名.長さ - 1) まで繰り返す:
小計 = 値段[番号] × 個数[番号]
合計金額 = 合計金額 + 小計
商品名[番号] + " : " + 値段[番号] + "円 × " + 個数[番号] + "個 = " + 小計 + "円"
"合計:" + 合計金額 + "円"
2. 出席確認システム
生徒リスト = ["相川", "石田", "上田", "江藤", "大川"]
出席状況 = [true, true, false, true, false]
"=== 出席確認 ==="
出席人数 = 0
欠席人数 = 0
番号 を 0 から (生徒リスト.長さ - 1) まで繰り返す:
もし 出席状況[番号] == true なら
生徒リスト[番号] + "さん:出席"
出席人数 = 出席人数 + 1
そうでなければ
生徒リスト[番号] + "さん:欠席"
欠席人数 = 欠席人数 + 1
"出席:" + 出席人数 + "人、欠席:" + 欠席人数 + "人"
3. ゲームのアイテム管理
// アイテムの種類と個数
アイテム名 = ["ポーション", "エーテル", "不死鳥の尾", "テント", "エリクサー"]
所持数 = [5, 3, 1, 2, 0]
使用可能数 = [99, 99, 99, 99, 99]
"=== アイテム一覧 ==="
番号 を 0 から (アイテム名.長さ - 1) まで繰り返す:
名前 = アイテム名[番号]
現在 = 所持数[番号]
最大 = 使用可能数[番号]
名前 + " : " + 現在 + "/" + 最大
もし 現在 == 0 なら
" → 在庫切れ!"
そうでなければ もし 現在 <= 2 なら
" → 残りわずか"
二次元配列(表のようなデータ)
時間割表を作る
// 月曜から金曜の時間割
時間割 = [
["国語", "算数", "理科", "社会", "体育"], // 月曜
["算数", "国語", "音楽", "図工", "図工"], // 火曜
["体育", "算数", "国語", "理科", "道徳"], // 水曜
["国語", "社会", "算数", "英語", "総合"], // 木曜
["算数", "理科", "体育", "国語", "学活"] // 金曜
]
曜日名 = ["月", "火", "水", "木", "金"]
// 時間割を表示
曜日 を 0 から 4 まで繰り返す:
"【" + 曜日名[曜日] + "曜日】"
時限 を 0 から 4 まで繰り返す:
(時限 + 1) + "時限目:" + 時間割[曜日][時限]
"---"
配列の便利な操作
ソート(並び替え)
// 点数を高い順に並べる
点数リスト = [65, 92, 78, 85, 90]
点数リスト.高い順に並べる()
// [92, 90, 85, 78, 65]
// 名前をあいうえお順に並べる
名前リスト = ["田中", "鈴木", "佐藤", "山田", "伊藤"]
名前リスト.あいうえお順に並べる()
// ["伊藤", "佐藤", "鈴木", "田中", "山田"]
フィルター(条件で絞り込む)
全員の点数 = [65, 92, 78, 85, 90, 55, 88, 72]
合格点 = 70
合格者の点数 = []
全員の点数の各点数 に対して繰り返す:
もし 点数 >= 合格点 なら
合格者の点数.追加(点数)
"合格者:" + 合格者の点数
// 合格者:[92, 78, 85, 90, 88, 72]
よくある間違いと対処法
間違い1:範囲外のアクセス
// ❌ 間違い
果物 = ["りんご", "みかん", "バナナ"]
4番目 = 果物[3] // エラー!3番目までしかない
// ✅ 正解
もし 3 < 果物.長さ なら
4番目 = 果物[3]
そうでなければ
"4番目の果物はありません"
間違い2:0から始まることを忘れる
// ❌ 間違い
生徒 = ["太郎", "花子", "次郎"]
"1番目の生徒:" + 生徒[1] // 花子(2番目)が表示される
// ✅ 正解
"1番目の生徒:" + 生徒[0] // 太郎
練習問題
問題1:最高点を見つける
テストの点数から最高点を見つけるプログラムを作ってください。
点数リスト = [85, 92, 78, 65, 90, 88, 95, 72]
答えを見る
点数リスト = [85, 92, 78, 65, 90, 88, 95, 72]
最高点 = 0
番号 を 0 から (点数リスト.長さ - 1) まで繰り返す:
もし 点数リスト[番号] > 最高点 なら
最高点 = 点数リスト[番号]
"最高点は" + 最高点 + "点です"
// 最高点は95点です
問題2:重複を除く
同じ値が複数ある配列から、重複を除いた配列を作ってください。
数字リスト = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
答えを見る
数字リスト = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
重複なしリスト = []
数字リストの各数字 に対して繰り返す:
すでにある = false
重複なしリストの各値 に対して繰り返す:
もし 値 == 数字 なら
すでにある = true
繰り返しを終了
もし すでにある == false なら
重複なしリスト.追加(数字)
"重複を除いた結果:" + 重複なしリスト
// 重複を除いた結果:[3, 1, 4, 5, 9, 2, 6]
実践演習:CommandPlaygroundで体験
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$
█
ファイルツリー
/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
今日のまとめ
覚えておいてほしい3つのこと
- 配列は「番号付きのたくさんの箱」(関連するデータをまとめて管理)
- 番号は0から始まる(最初は0番目)
- 繰り返し処理と組み合わせると、とても便利!
次回予告
次のレッスンでは、「クラスとオブジェクト」について学びます。
- 設計図(クラス)から実物(オブジェクト)を作る
- より複雑なデータを整理する方法
- 現実世界をプログラムで表現する
配列よりもっと高度なデータ整理の方法を身につけましょう!
チャレンジ問題
ミッション:席替えプログラム
クラスの席替えをランダムに行うプログラムを作ってください。
条件:
- 生徒は6人(名前は自由に決めて)
- 席は2列×3行の6席
- 全員がランダムな席に座る
- 結果を分かりやすく表示
答えの例を見る
// 生徒リスト
生徒 = ["太郎", "花子", "次郎", "さくら", "健太", "美咲"]
// ランダムに並び替える(シャッフル)
シャッフル済み = []
残り生徒 = 生徒.コピー()
6回繰り返す:
// 残りの中からランダムに1人選ぶ
ランダム位置 = ランダム(0 〜 残り生徒.長さ-1)
選ばれた生徒 = 残り生徒[ランダム位置]
// シャッフル済みに追加
シャッフル済み.追加(選ばれた生徒)
// 選ばれた生徒を残りから削除
残り生徒.削除(ランダム位置)
// 席に配置して表示
"=== 新しい席順 ==="
"[黒板]"
""
席番号 = 0
行 を 0 から 2 まで繰り返す:
行の表示 = ""
列 を 0 から 1 まで繰り返す:
行の表示 = 行の表示 + シャッフル済み[席番号] + " "
席番号 = 席番号 + 1
行の表示を表示
// 結果例:
// === 新しい席順 ===
// [黒板]
//
// 花子 健太
// 次郎 美咲
// さくら 太郎
素晴らしい!配列を使って、たくさんのデータを効率的に扱えるようになりました。これで、より複雑なプログラムも作れるようになりましたね!