У меня есть массив чисел, разделенных запятой, как показано на рисунке:
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 является отдельным и рассматривается как таковой.
Я делаю это в Спарке. Я написал следующий код:
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}
Я не могу понять, где я ошибаюсь. Не могли бы вы помочь мне исправить это. ТИА.