[GAS] 스프레드 시트에서 조합을 생성하는 스크립트
10180 단어 GoogleAppsScript
목적
조합을 만들고 싶다.
결론
코드
// 直積集合
function cartesian_product(array) {
return array.reduce(function(a,b){
return a.map(function(x){
return b.map(function(y){ return x.concat(y) })
}).reduce(function(a,b){ return a.concat(b) },[])
}, [[]])
}
function convert_values_to_array(values) {
var array = []
for(var i = 0; i < values.length; ++i){
if( values[i][0] === ''){
// pass
} else {
array.push(values[i][0])
}
}
return array
}
function generate_combination() {
const book = SpreadsheetApp.getActiveSpreadsheet()
const sheet = {
from: book.getSheetByName("from_name"),
out: book.getSheetByName("out_name")}
// 出力先シートをきれいにしておく
sheet.out.clear()
const row = {
first: 1, // Headerがあれば2 / なしなら1
last: sheet.from.getLastRow()}
const values = sheet.from.getDataRange().getValues()
var array = []
for (var j = 0; j < values[0].length; ++j) {
array.push(convert_values_to_array(sheet.from.getRange(row.first, j+1, row.last).getValues()))
}
const r = cartesian_product(array)
sheet.out.getRange(1, 1, r.length, r[0].length).setValues(r)
}
from 데이터
out 데이터
개요.
(실은, 약간 보는 모습 흉내이므로, 스스로도 이해하지 못하고 있는 곳이 있습니다.죄송합니다.)
직적 집합 사용할 수 있어? 같은 것을, 고전 시대의 동기에 말해졌으므로, 여러가지 검색했는데, 그것 같은데 맞았습니다.
Stack Overflow - Cartesian product of multiple arrays in JavaScript
여기 부분.
function cartesian_product(array) {
return array.reduce(function(a,b){
return a.map(function(x){
return b.map(function(y){ return x.concat(y) })
}).reduce(function(a,b){ return a.concat(b) },[])
}, [[]])
}
Reference
이 문제에 관하여([GAS] 스프레드 시트에서 조합을 생성하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/s_maeda_fukui/items/7494590ae710f671ad7f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)