Skip to content

Commit a19d523

Browse files
each test is working!
1 parent e212f36 commit a19d523

File tree

1 file changed

+25
-15
lines changed
  • core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api

1 file changed

+25
-15
lines changed

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/move.kt

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -158,27 +158,37 @@ internal fun <T, C> MoveClause<T, C>.moveTo(columnIndex: Int, insideGroup: Boole
158158
}
159159

160160
// two cases : columns are before, or after, the reference
161-
val columnsBeforeReference = columnsToMove.subList(0, columnIndex)
162-
if (columnIndex >= referenceAndSiblingsPaths.size){
163-
val effectiveColsBeforeRef = columnsBeforeReference.filter { it.path.last() != reference.path.last() }
164-
return df.move { effectiveColsBeforeRef.toColumnSet() }.after { reference }
161+
val columnsBeforeReferenceToMove = mutableListOf<ColumnPath>()
162+
val columnsAfterReferenceToMove = mutableListOf<ColumnPath>()
163+
val columnsToMovePath = columnsToMove.map { it.path }
164+
var referenceWasIterated = false
165+
referenceAndSiblingsPaths.forEach {
166+
if (it.path.last() == reference.path.last())
167+
referenceWasIterated = true
168+
else {
169+
if (columnsToMovePath.contains(it)){
170+
if (referenceWasIterated)
171+
columnsAfterReferenceToMove.add(it)
172+
else
173+
columnsBeforeReferenceToMove.add(it)
174+
}
175+
}
165176
}
166-
val columnsAfterReference = columnsToMove.subList(columnIndex +1, columnsToMove.size)
167177

168178
//don't move reference
169-
val effectiveColsBeforeRef = columnsBeforeReference.filter { it.path.last() != reference.path.last() }
170-
val effectiveColsAfterRef = columnsAfterReference.filter { it.path.last() != reference.path.last() }
179+
//val effectiveColsBeforeRef = columnsBeforeReference.filter { it.path.last() != reference.path.last() }
180+
//val effectiveColsAfterRef = columnsAfterReference.filter { it.path.last() != reference.path.last() }
171181

172-
//move cols before reference after reference ; move cols after reference before reference
173-
if (effectiveColsBeforeRef.isNotEmpty() && effectiveColsAfterRef.isNotEmpty()) {
174-
val intermediateDf = df.move { effectiveColsBeforeRef.toColumnSet() }.after { reference }
175-
val finalDf = intermediateDf.move { effectiveColsAfterRef.toColumnSet() }.before { reference }
182+
//move cols before reference after reference itself ; move cols after reference before reference itself
183+
if (columnsBeforeReferenceToMove.isNotEmpty() && columnsAfterReferenceToMove.isNotEmpty()) {
184+
val intermediateDf = df.move { columnsBeforeReferenceToMove.toColumnSet() }.after { reference }
185+
val finalDf = intermediateDf.move { columnsAfterReferenceToMove.toColumnSet() }.before { reference }
176186
return finalDf
177187
}
178-
if (effectiveColsBeforeRef.isNotEmpty())
179-
return df.move { effectiveColsBeforeRef.toColumnSet() }.after { reference }
180-
if (columnsAfterReference.isNotEmpty())
181-
return df.move { effectiveColsAfterRef.toColumnSet() }.before { reference }
188+
if (columnsBeforeReferenceToMove.isNotEmpty())
189+
return df.move { columnsBeforeReferenceToMove.toColumnSet() }.after { reference }
190+
if (columnsAfterReferenceToMove.isNotEmpty())
191+
return df.move { columnsAfterReferenceToMove.toColumnSet() }.before { reference }
182192

183193
// if it is not needed to move any of the nested columns
184194
return df

0 commit comments

Comments
 (0)