Scala SortedMap - iteratorFrom& co缺少对手?

时间:2015-02-14 18:49:41

标签: scala iterator scala-collections sortedmap

检索属于更大键的条目

我最近偶然发现SO question询问如何在SortedMap中检索大于给定键的键。非常,这些SortedMap方法值得注意:

  • from(from: A): SortedMap[A, B]

      

    创建此集合的远程投影,没有上限

  • iteratorFrom(start: A): Iterator[(A, B)]

      

    根据此映射的顺序,在此映射中包含的键大于或等于start的所有键/值对上创建迭代器。 x.iteratorFrom(y)相当于但通常比x.from(y).iterator更有效。

  • keysIteratorFrom(start: A): Iterator[A]

      

    根据此集合的顺序,在此集合中包含的所有键(或元素)上创建一个大于或等于start的迭代器。 x.keysIteratorFrom(y)相当于但通常比x.from(y).keysIterator更有效。

  • valuesIteratorFrom(start: A): Iterator[B]

      

    根据此映射的顺序,在此映射中包含的所有值上创建一个迭代器,该值与大于或等于start的键相关联。 x.valuesIteratorFrom(y)相当于但通常比x.from(y).valuesIterator更有效。

检索属于较小键的条目

为了检索小于给定密钥的密钥,您可以使用这些SortedMap方法(afaIk):

  • to(to: A): SortedMap[A, B]
      

    创建此集合的范围投影,没有下限

问题:
为什么没有模拟方法iteratorTokeysIteratorTovaluesIteratorTo
如果它们存在,它们将如何工作?:

  • 他们会从最高密钥向最低密钥向后迭代吗? (这对我来说更有意义)
  • 或者他们会从最低键到最高键向前迭代? 在这种情况下,您可以通过执行类似sortedMap.to(_).iterator()的操作来获取这些迭代器,尽管SortedMap的实现可以提供更有效的iteratorTo& co(类似于iteratorFrom& co)

1 个答案:

答案 0 :(得分:1)

当开始固定在最低键时,takeWhile就足够了:

scala> val m = TreeMap((0 to 10) map (i => (i, ('a' + i).toChar)) : _*)
m: scala.collection.immutable.TreeMap[Int,Char] = Map(0 -> a, 1 -> b, 2 -> c, 3 -> d, 4 -> e, 5 -> f, 6 -> g, 7 -> h, 8 -> i, 9 -> j, 10 -> k)

scala> m.iterator.takeWhile(_._1 < 5)
res1: Iterator[(Int, Char)] = non-empty iterator

scala> .toList
res2: List[(Int, Char)] = List((0,a), (1,b), (2,c), (3,d), (4,e))