【GAS】수치형의 2차원 배열을 선언하고 싶다

개요



스프레드시트에서 숫자를 받고 배열에 뱅뱅을 더해가고 싶을 때 선언한 빈 배열에 더해도 숫자로 취급되지 않고 계산되지 않는다.

처음부터 수치형으로 2차원 배열을 선언하고 싶다~라고 이야기.

스포일러



처음부터 수치형으로 선언하는 방법을 모르기 때문에, 요소 모두에 「0」이 들어간 2차원 배열을 만드는 형태에 착지^^;

비교적 스마트하게 기술할 수 있었다(라고 생각한다) 때문에, 메모가 테라 투고.

※제대로 된 방법이 있을지도 모르지만, 무교양이므로 이번 방법으로 해결 (웃음)

토리마 역기라면 이런 느낌?


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);

}


요점은 이렇게 말하는 것이지만, 왠지 멋지지 않고, 요소수가 많을 때의 기술이 귀찮은 것 같다.

성공 예 이전 실패 예



· 빈 배열 만들기 var array = Array(5);· 모든 요소에 0array.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);

}



완성의 외형만은 좋았지만, 모든 요소에 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);

}


잘 갔던 것 같아요^^)b

요약



「x개」×「y개」의 배열을 가지는 수치형의 2차원 배열을 선언하는, 단 하나의 선명한 방법은・・・
var arrays = [];

for(var i=0; i<y; i++){

  var array = Array(x).fill(0);
  arrays.push(array);

}

단 하나도, 별로 하고 있다고도 생각하지 않지만, 상당히 심플하게 완성되었다고 생각한다(자화 자찬).

오시마

좋은 웹페이지 즐겨찾기