提取连续数字以在scala列表中形成范围

时间:2014-11-20 12:12:38

标签: list scala range

我有一个元组的scala列表,

val stdLis:List[(String,Int)]=null

我需要将列表中的连续整数组合起来形成范围。最终结果只需要列表中的整数范围。以下方法留下非连续数字。但我需要在最终列表中形成连续数字的范围并保留非连续数字

def mergeConsecutiveNum(lis:List[(String,Int)])={ 
 var lisBuf = new ListBuffer[(String,Int)]
    val newRanges = new ListBuffer[(Int,Int)]()
    if(lis.size>1)
    lis.sliding(2).foreach{i=>
      if(i(0)._2+1 == i(1)._2)
        lisBuf.appendAll(i)
      else{
        //println(lisBuf)
        if(lisBuf.size>1) {
          newRanges.append((lisBuf.head._2, lisBuf.last._2))
          newRanges.append((i(0)._2,i(1)._2))
        }
        lisBuf.clear()
      }
    }else
    newRanges.append((lis.head._2,0))
    newRanges
}

例如:

val lis = List(("a",1),("b",2),("c",3),("d",4),("e",6),("f",7),("g",9))

应该给出

lis((1,4),(6,7),(9,0))

1 个答案:

答案 0 :(得分:1)

不知道你在问什么。 您的代码不会返回任何内容。 无论如何,假设您需要合并列表中的两个连续数字并根据这些数字创建一系列列表,您可以尝试这里

List(("", 5),("", 10),("", 6),("", 10)).map(_._2).grouped(2).map(ele => ele(0) to ele(1)).toList
List(Range(5, 6, 7, 8, 9, 10), Range(6, 7, 8, 9, 10))