【问题标题】:Scala SortedMap - iteratorFrom & co missing counterpart?Scala SortedMap - iteratorFrom & co 缺少对应物?
【发布时间】:2015-04-15 15:21:27
【问题描述】:

检索属于更大键的条目

我最近偶然发现了一个SO question,询问如何检索大于SortedMap 中给定键的键。 AfaIk,这些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)

【问题讨论】:

    标签: scala iterator scala-collections sortedmap


    【解决方案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))
    

    【讨论】:

    • 解决了从最低键到特定键的迭代。如何有效地从给定键向后迭代到最低键?
    猜你喜欢
    • 2011-01-10
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多