@@ -21,17 +21,23 @@ import org.jetbrains.kotlinx.dataframe.impl.columns.toColumns
21
21
import org.jetbrains.kotlinx.dataframe.kind
22
22
import org.jetbrains.kotlinx.dataframe.nrow
23
23
24
- internal fun <T , G > GroupBy <T , G >.sortByImpl (columns : SortColumnsSelector <G , * >): GroupBy <T , G > {
25
- return toDataFrame()
24
+ @Suppress(" UNCHECKED_CAST" , " RemoveExplicitTypeArguments" )
25
+ internal fun <T , G > GroupBy <T , G >.sortByImpl (columns : SortColumnsSelector <G , * >): GroupBy <T , G > =
26
+ toDataFrame()
27
+
28
+ // sort the individual groups by the columns specified
26
29
.update { groups }
27
30
.with { it.sortByImpl(UnresolvedColumnsPolicy .Skip , columns) }
31
+
32
+ // sort the groups by the columns specified (must be either be the keys column or "groups")
33
+ // will do nothing if the columns specified are not the keys column or "groups"
28
34
.sortByImpl(UnresolvedColumnsPolicy .Skip , columns as SortColumnsSelector <T , * >)
29
- .asGroupBy { it.getFrameColumn(groups.name()).castFrameColumn() }
30
- }
35
+
36
+ .asGroupBy { it.getFrameColumn(groups.name()).castFrameColumn< G >() }
31
37
32
38
internal fun <T , C > DataFrame<T>.sortByImpl (
33
39
unresolvedColumnsPolicy : UnresolvedColumnsPolicy = UnresolvedColumnsPolicy .Fail ,
34
- columns : SortColumnsSelector <T , C >
40
+ columns : SortColumnsSelector <T , C >,
35
41
): DataFrame <T > {
36
42
val sortColumns = getSortColumns(columns, unresolvedColumnsPolicy)
37
43
if (sortColumns.isEmpty()) return this
@@ -71,7 +77,6 @@ internal fun <T, C> DataFrame<T>.getSortColumns(
71
77
else -> throw IllegalStateException (" Can not use ${col.kind} as sort column" )
72
78
}
73
79
}
74
- }
75
80
76
81
internal enum class SortFlag { Reversed , NullsLast }
77
82
@@ -86,12 +91,14 @@ internal fun <C> ColumnWithPath<C>.addFlag(flag: SortFlag): ColumnWithPath<C> {
86
91
SortFlag .NullsLast -> SortColumnDescriptor (col.column, col.direction, true )
87
92
}
88
93
}
94
+
89
95
is ValueColumn -> {
90
96
when (flag) {
91
97
SortFlag .Reversed -> SortColumnDescriptor (col, SortDirection .Desc )
92
98
SortFlag .NullsLast -> SortColumnDescriptor (col, SortDirection .Asc , true )
93
99
}
94
100
}
101
+
95
102
else -> throw IllegalArgumentException (" Can not apply sort flag to column kind ${col.kind} " )
96
103
}.addPath(path)
97
104
}
@@ -103,7 +110,7 @@ internal class ColumnsWithSortFlag<C>(val column: ColumnSet<C>, val flag: SortFl
103
110
internal class SortColumnDescriptor <C >(
104
111
val column : ValueColumn <C >,
105
112
val direction : SortDirection = SortDirection .Asc ,
106
- val nullsLast : Boolean = false
113
+ val nullsLast : Boolean = false ,
107
114
) : ValueColumn<C> by column
108
115
109
116
internal enum class SortDirection { Asc , Desc }
0 commit comments