タイプリストからタイプレコードへの変換。あるいはタイプレコードからタイプリストへの変換。これってどうやるんだろうと色々試してみた。
TypeList = {
{"日付", Date.Type},
{"テキスト", Text.Type},
{"数値", Int64.Type}
}
例えばこんなリストがあるとして、これをレコードに加工したい場合。
TypeRecord = [
a = List.Transform(TypeList, each _{0}),
b = List.Transform(TypeList, each {_{1}, false}),
c = List.Transform(b, each Record.FromList(_, {"Type", "Optional"})),
d = Type.ForRecord(Record.FromList(c, a), false)
][d]
最初はこんな感じで考えてみた。ただなんかどうもしっくりこない。変換しまくりで不格好な気がする。List.Transoformだらけなのも気に食わない。
あきらめが悪いので色々考えてみた結果、いっそ空のテーブルに一度変換してからレコードを取り出したらどうだろうかと思い付いた。
TypeRecord = [
a = #table(List.Transform(TypeList, each _{0}),{}),
b = Table.TransformColumnTypes(a, TypeList),
c = Type.TableRow(Value.Type(b))
][c]
こっちのほうが幾分かすっきりする。
次は反対に、レコードからリストに変換してみる。
TypeList = [
a = Type.RecordFields(TypeRecord),
b = Record.FieldNames(a),
c = List.Transform(Record.FieldValues(a), each [Type]),
d = List.Zip({b, c})
][d]
なんとなくまだ納得できてない。