メインコンテンツへスキップ
レッスン 9 / 15推定時間: 25

たくさんのデータを整理する:配列とリスト

買い物リスト、クラス名簿、ゲームのアイテム一覧...たくさんのデータをまとめて管理する「配列」と「リスト」を学びます。データの整理整頓のプロになりましょう!

はじめに

今まで学んだ「変数」は、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つのこと

  1. 配列は「番号付きのたくさんの箱」(関連するデータをまとめて管理)
  2. 番号は0から始まる(最初は0番目)
  3. 繰り返し処理と組み合わせると、とても便利!

次回予告

次のレッスンでは、「クラスとオブジェクト」について学びます。

  • 設計図(クラス)から実物(オブジェクト)を作る
  • より複雑なデータを整理する方法
  • 現実世界をプログラムで表現する

配列よりもっと高度なデータ整理の方法を身につけましょう!

チャレンジ問題

ミッション:席替えプログラム

クラスの席替えをランダムに行うプログラムを作ってください。

条件:

  • 生徒は6人(名前は自由に決めて)
  • 席は2列×3行の6席
  • 全員がランダムな席に座る
  • 結果を分かりやすく表示
答えの例を見る
// 生徒リスト
生徒 = ["太郎", "花子", "次郎", "さくら", "健太", "美咲"]

// ランダムに並び替える(シャッフル)
シャッフル済み = []
残り生徒 = 生徒.コピー()

6回繰り返す:
    // 残りの中からランダムに1人選ぶ
    ランダム位置 = ランダム(0 〜 残り生徒.長さ-1)
    選ばれた生徒 = 残り生徒[ランダム位置]
    
    // シャッフル済みに追加
    シャッフル済み.追加(選ばれた生徒)
    
    // 選ばれた生徒を残りから削除
    残り生徒.削除(ランダム位置)

// 席に配置して表示
"=== 新しい席順 ==="
"[黒板]"
""
席番号 = 0
行 を 0 から 2 まで繰り返す:
    行の表示 = ""
    
    列 を 0 から 1 まで繰り返す:
        行の表示 = 行の表示 + シャッフル済み[席番号] + "  "
        席番号 = 席番号 + 1
    
    行の表示を表示

// 結果例:
// === 新しい席順 ===
// [黒板]
// 
// 花子  健太
// 次郎  美咲
// さくら  太郎

素晴らしい!配列を使って、たくさんのデータを効率的に扱えるようになりました。これで、より複雑なプログラムも作れるようになりましたね!

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行