Подпись search
составляет search[B >: A](elem: B)(implicit ord: Ordering[B])
. У вас есть массив типа [Long, Q]
. Таким образом, чтобы компилятор правильно выводил Ordering
, вам нужно вызвать поиск следующим образом:
myArray.search(6L-> q/*Q(6,9)*/)(Ordering.by(_._1)) //ordering by the first value in a tuple.
и что вы делаете: myArray.search(6L)
. Если я правильно понимаю, что вы пытаетесь сделать, это, вероятно, найти значение и позицию в массиве.
Вы можете решить это, используя две отдельные структуры данных:
ключи могут храниться в массиве, например:
val myArray = Array(5L, 6L, 7L).toList
myArray.search(6L).insertionPoint
и если вам нужны значения, вы можете использовать карту, которая будет работать как словарь:
val dictionary = Map(
5L -> new Q(1,2),
6L-> new Q(6,9),
7L-> new Q(7,6)
)
EDIT:
На самом деле, я заметил, что что-то подобное будет работать:
val dummy = new Q(0,0) //any instance of Q
myArray.search(6L-> dummy)(Ordering.by(_._1)).insertionPoint //1
Это работает, так как для поиска точки вставки Ordering
используется и тест на равенство не выполняется.