1 private@ 2 3 type SortedItem<K, V> where K : Comparable = struct 4 key : K 5 value : V 6 7 def (>) rhs = key > rhs.key 8 def (<) rhs = key < rhs.key 9 def (>=) rhs = key >= rhs.key 10 def (<=) rhs = key <= rhs.key 11 12 is Comparable 13 14 public@ 15 16 type MutList<T> where T : Comparable 17 def sort = 18 quicksort as_mut_slice 0 (size as i32 - 1) 19 version += 1 20 21 type MutList<T> 22 def sort_by_key<U> (f : T -> U) where U : Comparable = 23 let list = List.new 24 list.provision size 25 for value in self do 26 let key = f value 27 let item = SortedItem =key =value 28 list.add item 29 30 list.sort 31 for i = 0 to size do 32 self[i] = list[i].value 33 34 end@ list 35