///|
/// Evaluate Transpose
fn eval_transpose(input : Json) -> Iter[Json] raise PrimitiveError {
match input {
Array(arr) => {
let max_len = max_row_len(arr)
let rows = build_columns(arr, max_len)
Iter::singleton(Json::array(rows.map(Json::array)))
}
_ => raise TypeMismatch("array", @ast_internal.json_type_name(input))
}
}
///|
fn max_row_len(rows : ArrayView[Json]) -> Int32 {
rows.fold(init=0, fn(max_len, row) {
match row {
Array(inner) => @cmp.maximum(max_len, inner.length())
_ => max_len
}
})
}
///|
fn build_columns(rows : ArrayView[Json], max_len : Int32) -> Array[Array[Json]] {
let columns : Array[Array[Json]] = []
for col in 0.. if col < inner.length() { column.push(inner[col]) }
_ => ()
}
}
columns.push(column)
}
columns
}