Skip to content

Commit ad2f419

Browse files
committed
efficiency boost for flat df's in toon
1 parent 18c2643 commit ad2f419

File tree

1 file changed

+8
-4
lines changed
  • dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/io

1 file changed

+8
-4
lines changed

dataframe-json/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/io/writeToon.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import org.jetbrains.kotlinx.dataframe.AnyFrame
44
import org.jetbrains.kotlinx.dataframe.AnyRow
55
import org.jetbrains.kotlinx.dataframe.api.cast
66
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
7+
import org.jetbrains.kotlinx.dataframe.api.getColumn
78
import org.jetbrains.kotlinx.dataframe.api.group
89
import org.jetbrains.kotlinx.dataframe.api.into
910
import org.jetbrains.kotlinx.dataframe.api.isColumnGroup
1011
import org.jetbrains.kotlinx.dataframe.api.isFrameColumn
1112
import org.jetbrains.kotlinx.dataframe.api.isList
1213
import org.jetbrains.kotlinx.dataframe.api.isValueColumn
1314
import org.jetbrains.kotlinx.dataframe.api.rows
15+
import org.jetbrains.kotlinx.dataframe.size
1416
import kotlin.reflect.KType
1517
import kotlin.reflect.full.isSubtypeOf
1618
import kotlin.reflect.full.withNullability
@@ -31,11 +33,13 @@ internal fun encodeToToonImpl(df: AnyFrame): ToonArray {
3133
val isFlat = df.columns().all { it.isValueColumn() }
3234
if (isFlat) {
3335
val header = df.columnNames()
34-
val types = df.columnTypes()
3536

36-
val objectArray = df.rows().map { row ->
37-
header.indices.map { i ->
38-
row[i].toToonPrimitive(types[i])
37+
val (nCol, nRow) = df.size()
38+
39+
val objectArray = (0..<nRow).map { rowIndex ->
40+
(0..<nCol).map { colIndex ->
41+
val col = df.getColumn(colIndex)
42+
col[rowIndex].toToonPrimitive(col.type())
3943
}
4044
}
4145

0 commit comments

Comments
 (0)