構造体の更新《クラス・構造体》

クラス・構造体メニュー【構造体の作成・構造体の検索・構造体の整列・構造体の更新】

【STEP: 1】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   class User {
      constructor(n, o, b, s) {
         this.n = n;
         this.o = o;
         this.b = b;
         this.s = s;
      }
      info() {
         console.log(`User{`);
         console.log(`nickname : ${this.n}`);
         console.log(`old : ${this.o}`);
         console.log(`birth : ${this.b}`);
         console.log(`state : ${this.s}`);
         console.log(`}`);
      }
   }
   for (let i = 1; i <= N; i++) {
      const user = new User(...lines[i].split(' '));
      user.info();
   }
});
hogeちゃんの画像

classの書式。

class クラス名 {
  constructor(変数) {
    this.クラス内で使用する変数 = 受け取った変数;
  }
  メソッド名() {
    〇〇してね;
  }
}
hogeちゃんの画像

new User(...lines[i].split(' '))でインスタンス生成。user.output()で メソッドを呼び出し。

【STEP: 2】コード

reader.on('close', () => {
  const N = Number(lines[0]);
  const K = lines[N + 1];
  class User {  // クラス User を宣言して…
    constructor(name, old, birth, state) {  // コンストラクターで引数の受取り
      this.name = name;  // クラス内で使用する変数に受け取った値を代入
      this.old = old;  //       〃
      this.birth = birth;  //     〃
      this.state = state;  //     〃
    }
    info() {  // メソッド(関数)
      console.log(this.name);
    }
  }
  for (let i = 1; i <= N; i++) {
    user = new User(...lines[i].split(' '));  // インスタンス
    if (user.old === K) {  // user.oldK なら…
      user.info();  // user.info() を呼び出して user.name を出力
    }
  }
});
hogeちゃんの画像

user.oldK のときのみ user.info()を呼び出しています。

【STEP: 3】コード

reader.on('close', () => {
   const N = Number(lines[0]);
   class User {
      constructor(name, old, birth, state) {
         this.name = name;
         this.old = old;
         this.birth = birth;
         this.state = state;
      }
      info(){
         console.log(this.name, this.old, this.birth, this.state); 
      }
   }
   const users = [];  // User の インスタンスを保存するための配列
   for (let i = 1; i <= N; i++) {
      const [name, old, birth, state] = lines[i].split(' ');
      users.push(new User(name, old, birth, state));  // インスタンス を生成して users に保存
   }
   users.sort((s, b) => s.old - b.old);  // User の インスタンス を old を基準に並替え
   users.forEach(user => {
      user.info();  // User の メソッドを呼出
   });
});
hogeちゃんの画像

usersUser の インスタンス を保存するための配列。old を基準にインスタンスの並べ替えを行っています。

【FINAL】コード

reader.on('close', () => {
   class User {  // クラス User を宣言して…
      constructor(nickname, old, birth, state) {  // コンストラクターで引数の受取り
         this.name = nickname;  // クラス内の変数に受け取った値を代入
         this.old = old;  //         〃
         this.birth = birth;  //       〃
         this.state = state;  //       〃
      }
      changeName(new_name) { // メソッド(関数)
         this.name = new_name;  // インスタンスの変数を上書き
      }
      info() { // メソッド(関数)
         console.log(this.kname, this.old, this.birth, this.state);  // 出力
      }
   }
   const users = [];  // User の インスタンスを保存するための配列
   const [N, K] = lines[0].split(' ').map(Number);
   for (let i = 1; i <= N; i++) {
      const [name, old, birth, state] = lines[i].split(' ');
      users.push(new User(name, old, birth, state));  // インスタンス を生成して保存
   }
   for (let i = N + 1; i <= N + K; i++) {
      const [A, M] = lines[i].split(' ');
      users[A - 1].changeName(M);  // インスタンス.changeName(M) でメソッドを呼び出し
   }
   users.forEach(user => {
      user.info();
   });
});
hogeちゃんの画像

クラス内に メソッド changeName(name) を設置し 配列 users の 添字 が [A-1] であれば 呼び出して インスタンスの 値を更新しています。

コメント