1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GAS】数値型の二次元配列を宣言したい

Last updated at Posted at 2020-10-05

概要

スプレッドシートから数字を受け取って、配列にバンバン足し込んでいきたい時、宣言した空の配列に足しても数字として扱われず計算されない。

最初から数値型で二次元配列を宣言したいな~って話。

ネタばれ

最初から数値型で宣言する方法が分からなかったので、要素すべてに「0」の入った二次元配列を作る形に着地^^;

割とスマートに記述できた(と思う)ので、メモがてら投稿。

※ちゃんとした方法があるのかもしれないけど、無教養なため今回の方法で解決(笑)

とりま力技ならこんな感じ?

function arrays() {
  
  //5×3の要素すべてにゼロが入った配列
  var arrays = [[0,0,0,0,0], 
                [0,0,0,0,0],
                [0,0,0,0,0]];
  
  //出来栄えを確認
  Logger.log('\n', arrays, '\n');
  
  //全ての要素に1を足してみる
  for(var i=0; i<3; i++){
    for(var j=0; j<5; j++){
      
      arrays[i][j] += 1;
      
    }
  }
  
  //数値型なので足し算OK!
  Logger.log('\n', arrays);
  
}

image.png
要はこう言う事なんだけど、なんかカッコよくないし、要素数が多い時の記述が面倒臭そう。

成功例の前の失敗例

・空の配列作成 var array = Array(5);
・全ての要素にゼロ array.fill(0);
・別の配列にプッシュ arrays.push(array);
で行けんじゃね?と思って書いたのがコチラ。

function arrays() {
  
  var arrays = [];
  var array = Array(5).fill(0);
  
  for(var k=0; k<3; k++){

    arrays.push(array);

  }
  
  Logger.log('\n', arrays, '\n');
  
  for(var i=0; i<3; i++){
    for(var j=0; j<5; j++){
      
      arrays[i][j] += 1;
      
    }
  }
  
  Logger.log('\n', arrays);
  
}

image.png
出来上がりの見た目だけは良かったんだけど、全ての要素に1を足した時の挙動が変。なぜか全ての要素に3回ずつ足されてる???

同じ配列が3回並べて表示されてるだけのような・・・次元が歪んでる。

成功!

だったら、配列の宣言もfor文の中に入れて、繰り返しの度に再宣言させたらどうだろう。

function arrays() {
  
  var arrays = [];
  
  for(var k=0; k<3; k++){
    
    var array = Array(5).fill(0);
    arrays.push(array);
    
  }
  
  Logger.log('\n', arrays, '\n');
  
  for(var i=0; i<3; i++){
    for(var j=0; j<5; j++){
      
      arrays[i][j] += 1;
      
    }
  }
  
  Logger.log('\n', arrays);
  
}

image.png
上手く行ったみたい^^)b

まとめ

「x個」×「y個」の配列を持った数値型の二次元配列を宣言する、たったひとつの冴えたやりかたは・・・

var arrays = [];
  
for(var i=0; i<y; i++){
    
  var array = Array(x).fill(0);
  arrays.push(array);
    
}

たったひとつとも、冴えてるとも思わないけど、結構シンプルに仕上がったと思う(自画自賛)。

おしまい

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?