@@ -2,7 +2,6 @@ use std::collections::HashSet;
22use std:: fmt;
33
44use array_tool:: vec:: { Intersect , Union } ;
5- use indexmap:: IndexMap ;
65use serde_json:: { Number , Value } ;
76
87use parser:: parser:: * ;
@@ -1167,7 +1166,8 @@ impl SelectorMut {
11671166 origin : & Value ,
11681167 target : & mut Vec < & Value > ,
11691168 tokens : & mut Vec < String > ,
1170- visited : & mut IndexMap < * const Value , Vec < String > > ,
1169+ visited : & mut HashSet < * const Value > ,
1170+ visited_order : & mut Vec < Vec < String > > ,
11711171 ) -> bool {
11721172 trace ! ( "{:?}, {:?}" , target, tokens) ;
11731173
@@ -1177,7 +1177,9 @@ impl SelectorMut {
11771177
11781178 target. retain ( |t| {
11791179 if std:: ptr:: eq ( origin, * t) {
1180- visited. insert ( * t, tokens. to_vec ( ) ) ;
1180+ if visited. insert ( * t) {
1181+ visited_order. push ( tokens. to_vec ( ) ) ;
1182+ }
11811183 false
11821184 } else {
11831185 true
@@ -1188,7 +1190,7 @@ impl SelectorMut {
11881190 Value :: Array ( vec) => {
11891191 for ( i, v) in vec. iter ( ) . enumerate ( ) {
11901192 tokens. push ( i. to_string ( ) ) ;
1191- if _walk ( v, target, tokens, visited) {
1193+ if _walk ( v, target, tokens, visited, visited_order ) {
11921194 return true ;
11931195 }
11941196 tokens. pop ( ) ;
@@ -1197,7 +1199,7 @@ impl SelectorMut {
11971199 Value :: Object ( map) => {
11981200 for ( k, v) in map {
11991201 tokens. push ( k. clone ( ) ) ;
1200- if _walk ( v, target, tokens, visited) {
1202+ if _walk ( v, target, tokens, visited, visited_order ) {
12011203 return true ;
12021204 }
12031205 tokens. pop ( ) ;
@@ -1209,14 +1211,21 @@ impl SelectorMut {
12091211 return false ;
12101212 }
12111213
1212- let mut visited = IndexMap :: new ( ) ;
1214+ let mut visited = HashSet :: new ( ) ;
1215+ let mut visited_order = Vec :: new ( ) ;
12131216
12141217 if let Some ( origin) = & self . value {
12151218 let mut tokens = Vec :: new ( ) ;
1216- _walk ( origin, & mut result, & mut tokens, & mut visited) ;
1219+ _walk (
1220+ origin,
1221+ & mut result,
1222+ & mut tokens,
1223+ & mut visited,
1224+ & mut visited_order,
1225+ ) ;
12171226 }
12181227
1219- visited . iter ( ) . map ( | ( _ , v ) | v . to_vec ( ) ) . collect ( )
1228+ visited_order
12201229 }
12211230
12221231 pub fn delete ( & mut self ) -> Result < & mut Self , JsonPathError > {
0 commit comments