我有这样的数据:
val timeArr = Array("09:00:00|09:30:00", "10:00:00|11:00:00", "12:00:00|15:00:00","10:00:01|13:23:55")
我希望以下列方式输出
(‘09:00:00’, ‘S’)
(‘09:30:00’, ‘E’)
(‘10:00:00’, ‘S’)
(‘10:00:01’, ‘S’)
(‘11:00:00’, ‘E’)
(‘12:00:00’, ‘S’)
(‘13:23:55’, ‘E’)
(‘15:00:00’, ‘E’)
开始时间为S
,结束时间为E
。
我尝试了使用map
的各种方式,但它没有用。
答案 0 :(得分:4)
建立@mfirry答案我觉得这给了你想要的东西。
split("|")
会产生一个Array[Array[String]]
,这有点笨拙。使用flatMap
和case Array(a, b, _*)
使得处理内部数组更容易获得所需的输出。最后,您对元组的第一个元素(时间)进行排序。
scala> timeArr.map(_.split("\\|")).flatMap { case Array(a, b, _*) => Array((a, 'S'), (b, 'E'))}.sortBy(t => t._1)
res150: Array[(String, Char)] =
Array(
(09:00:00,S),
(09:30:00,E),
(10:00:00,S),
(10:00:01,S),
(11:00:00,E),
(12:00:00,S),
(13:23:55,E),
(15:00:00,E)
)
答案 1 :(得分:3)
这应该有效:
self.startAnimation(index: 0)
或一个有趣的单行:
for {
a <- timeArr.map(_.split("\\|"))
b <- a.zipWithIndex.map{ case (e, i) => if(i == 0) { (e,'S') } else (e, 'E') }
} yield b
答案 2 :(得分:1)
作为&#34; code golf&#34;挑战,我想知道我能做多么短暂。
timeArr.flatMap(x => Array((x take 8, 'S'), (x drop 9, 'E')))
答案 3 :(得分:0)
首先,你需要创建一个地图来创建元组(开始,结束),然后你想要的是创建一个flatMap。
尝试这样的事情:
val result = timeArr.map(_.split("\\|"))
.flatMap(t => (t(0), 'S') :: (t(1), 'E') :: Nil)
一些解释:
map(_.split("\\|")
这会将字符串拆分为String of Array,因此原始集合的每个元素现在都有一个String数组。
所以...现在你有一个阵列数组......但你需要一个简单的数组。对于这种类型的问题是当你需要使用flatMap时:
flatMap(t => (t(0), 'S') :: (t(1), 'E') :: Nil)