【发布时间】:2018-05-16 15:33:22
【问题描述】:
我有一个用逗号分隔的数字数组,如图所示:
a:{108,109,110,112,114,115,116,118}
我需要这样的输出:
a:{108-110、112、114-116、118}
我正在尝试将连续数字与中间的“-”分组。 例如,108,109,110 是连续数字,所以我得到 108-110。 112是单独的条目; 114,115,116 再次代表一个序列,所以我得到 114-116。 118 是单独的,并按此处理。
我正在 Spark 中执行此操作。我写了以下代码:
import scala.collection.mutable.ArrayBuffer
def Sample(x:String):ArrayBuffer[String]={
val x1 = x.split(",")
var a:Int = 0
var present=""
var next:Int = 0
var yrTemp = ""
var yrAr= ArrayBuffer[String]()
var che:Int = 0
var storeV = ""
var p:Int = 0
var q:Int = 0
var count:Int = 1
while(a < x1.length)
{
yrTemp = x1(a)
if(x1.length == 1)
{
yrAr+=x1(a)
}
else
if(a < x1.length - 1)
{
present = x1(a)
if(che == 0)
{
storeV = present
}
p = x1(a).toInt
q = x1(a+1).toInt
if(p == q)
{
yrTemp = yrTemp
che = 1
}
else
if(p != q)
{
yrTemp = storeV + "-" + present
che = 0
yrAr+=yrTemp
}
}
else
if(a == x1.length-1)
{
present = x1(a)
yrTemp = present
che = 0
yrAr+=yrTemp
}
a = a+1
}
yrAr
}
val SampleUDF = udf(Sample(_:String))
我得到如下输出:
a:{108-108、109-109、110-110、112、114-114、115-115、116-116、118}
我无法弄清楚我哪里出错了。你能帮我纠正这个问题吗? TIA。
【问题讨论】:
-
请解释导致您预期输出的规则。而且,这与 spark 无关,只是一个 scala 问题
-
@RaphaelRoth 我已经在我的问题中编辑了规则。
标签: scala for-loop if-statement while-loop arraybuffer