Эффективно ли возвращать следующее большее значение несуществующего ключа в отсортированных коллекциях scala? - PullRequest
2 голосов
/ 09 декабря 2010

В scala, с учетом отсортированной карты, дерева или списка, какой самый эффективный способ вернуть следующее большее значение несуществующего ключа?Кроме того, возможно ли получить «итератор / курсор», начинающийся с этого элемента?

Редактировать:

Я доволен любой интерпретацией «эффективно»,например, «время выполнения», «использование памяти», «ясность» или «отнимает наименьшее возможное время программиста для реализации и поддержки» (спасибо Кевину Райту).

Ответы [ 2 ]

2 голосов
/ 09 декабря 2010

Если вы используете SortedMap, то вы можете позвонить range на него. Ну вроде. Он разбит до 2.8.1, если вы планируете добавлять и / или удалять элементы с карты впоследствии. Все должно быть хорошо, если вы избегаете этих операций, и это было исправлено и в следующих версиях Scala.

2 голосов
/ 09 декабря 2010

Определение «эффективно» как «отнимает наименьшее возможное время программиста для реализации и поддержки» ...

Для последовательности:

val s = Seq(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41)
val overSixteen = s dropWhile (_ < 16)

Для карты:

val s = Map(2->"a", 3->"b", 5->"c", 7->"d", 11->"e", 13->"f")
val overSix = s dropWhile (_._1 < 6)

Если вы предпочитаете Итератор, просто наберите .iterator для полученной коллекции, или вы можете использовать .view до dropWhile, если выособенно интересует ленивое поведение.

...