Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.56 KB | None | 0 0
  1. inline fun <reified T> myFilter(src: Array<T>, noinline filter: (T) -> Boolean): Array<T> {
  2. if (src.isEmpty()) return emptyArray()
  3. return myFilter(src, emptyArray(), filter)
  4. }
  5.  
  6. tailrec fun <T> myFilter(src: Array<T>, dest: Array<T>, filter: (T) -> Boolean): Array<T> {
  7. return if (src.isEmpty())
  8. dest
  9. else myFilter(src.tail, if (filter(src.head)) { dest + src.head } else dest, filter)
  10. }
  11.  
  12. private val <T> Array<T>.tail: Array<T> get() = if (size == 1) copyOf(0) as Array<T> else copyOfRange(1, size)
  13. private val <T> Array<T>.head: T get() = get(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement