https://www.youtube.com/watch?v=bV7nQNdv0YA
Excel And Vba님 코드를 보면서 앱스스크립트 개념을 다잡고 있어 코드 리뷰를 해보도록 하겠다.
더보기
function rndX() {
let sht = SpreadsheetApp.getActiveSheet();
let v= sht.getRange("b4:b17").getValues();
v.sort(()=>Math.random()-0.5)
let t = sht.getRange("d4:d17").setValues(v);
let val = sht.getRange("f8");
val.setValue(val.getValue() + 1 );
}
코드는 평범하였지만
v.sort(()=>Math.random()-0.5)
이부분이 이해가 되지않았다. 왜 마이너스 0.5를 뺄까에 모든 신경이 곤두설수 밖에 없었다. 혹시나 해서 구글신을 모셨봤더니...허걱
자바스크립트에서는 이코드가 랜덤으로 정렬하는 것으로 유명한 듯 하다.
Math.random은 0부터 1사이의 랜덤한 난수를 제공하는데 여기서 이 중간인 0.5를 빼주면 -0.5 ~ 0.5 사이의 난수가 나오게 된다.
sort는 두수를 비교하게 되는데, 예를 들어 {20,10} 이라고 하면 앞에수에서 뒤에수를 뺐을때 양수가 나오면 앞에수가 더 큰 수라는 뜻이므로 앞뒤가 변하게 된다. 즉 sort(math.random-0.5)는 -0.5~ 0.5의 난수중 양수값을 가지면 자리를 변경하고 마이너스가 나오면 위치를 변경하지 않는다고 한다.
막상 이 알고리즘을 아니까 너무 뿌듯하다..
단 이 코드의 단점은 한쪽으로 값이 쏠리는 감이 없지않아 있다고 하니 참고하길 바란다.
'GAS > [CAS_손코딩]' 카테고리의 다른 글
[GAS] 웹앱으로 입력된 날짜를 비교하여 값을 출력하기 (0) | 2024.05.05 |
---|---|
[GAS] 스프레드시트의 데이터를 웹상에 출력하기 (0) | 2024.05.01 |
[GAS] 영역처리하기 [ ARRAY _ OBJECT ] (0) | 2023.11.02 |
댓글