(Value,Index)基于索引的对范围过滤器

时间:2018-04-17 11:45:32

标签: scala

我正在寻找一种方法来根据范围标准从给定的数据结构Array [Array [(String,Int)]]中获取所有对。

澄清更多:考虑以下示例:

val block= Array(Array(("foo",0),("bar",1),("foobar",2),("barfoo",3)),Array(("FOO",0),("BAR",1),("FOOBAR",2),("BARFOO",3),("FOOFOO",4)))

我想从索引3开始获取字符串数组,如下所示:

Array(Array("barfoo"),Array("BARFOO", "FOOFOO"))

试过这样:

  

blocks.filter {case(k,v)=> V> = 3} .keys

无法构造它,因为所需的类型需要是Array [(String,Int)]才能进行过滤。我知道我之前错过了地图,但似乎无法绕过。

2 个答案:

答案 0 :(得分:2)

由于 ViewData["Title"] = Localizer["HomeTitle"]; 的类型为block,因此在使用Array[Array[(String, Int)]]之前,您需要使用filter操作。使用map可以获得所需的结果。

答案 1 :(得分:1)

如果元组的第二部分为< 3,则可以删除元素:

scala> val block = Array(
     |   Array(("foo",0),("bar",1),("foobar",2),("barfoo",3)),
     |   Array(("FOO",0),("BAR",1),("FOOBAR",2),("BARFOO",3),("FOOFOO",4))
     | )
block: Array[Array[(String, Int)]] = Array(Array((foo,0), (bar,1), (foobar,2), (barfoo,3)), Array((FOO,0), (BAR,1), (FOOBAR,2), (BARFOO,3), (FOOFOO,4)))

scala> block.map(_.dropWhile(_._2 < 3).map(_._1).toArray)
res0: Array[Array[String]] = Array(Array(barfoo), Array(BARFOO, FOOFOO))