Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
scala:日期列表到范围列表_Scala - Fatal编程技术网

scala:日期列表到范围列表

scala:日期列表到范围列表,scala,Scala,我有这样的想法: case class Range(start: String, end: String) List("s1", "s2", "s3", "s4") 我想得到: List(Range("s1","s2"), Range("s2","s3"), Range("s3", "s4")) 当然,我可以使用基于java的经典解决方案,但我正在寻找更优雅的解决方案。这正是您所期望的 list.sliding(2).collect { case List(from, to) => R

我有这样的想法:

case class Range(start: String, end: String)
List("s1", "s2", "s3", "s4")
我想得到:

List(Range("s1","s2"), Range("s2","s3"), Range("s3", "s4"))

当然,我可以使用基于java的经典解决方案,但我正在寻找更优雅的解决方案。

这正是您所期望的

list.sliding(2).collect { case List(from, to) => Range(from, to) }.toList
res0: List[Range] = List(Range(s1,s2), Range(s2,s3), Range(s3,s4))
这是另一个选择

(list zip list.tail) map Range.tupled

下面是一个简单的解决方案,它可以在不考虑数据类型的情况下工作(您可以在以后映射到任何您想要的数据):


干杯!滑动是我要找的。谢谢大家!@Łukasz,
Range
是一个对象,而不是一个函数,
Range.apply()
是重载的,因此在尝试获取它时存在歧义
。tupled
。所有这一切你都是对的,但在这里,我使用的是OP定义的
Range
case类,而不是scala
Range
,因此没有重载,一切都可以编译,我用repl测试了它。除非我遗漏了什么?也许是我的错,我应该提供更有意义的名字。无论如何,这个解决方案可以完成任务。错过了。我的不好。很好,但是您可以通过跳过
右键来保存对
l
的遍历。结果也是一样的。@jwvh酷,我没注意到
drop(1)
实际上是一个
tail
操作。预期结果包含
Range
s,而不是元组。您好@ukasz,感谢您的观察,现在它更简洁了:
l zip l.tail
我没有将它映射到一个范围,因为我只是想演示这个想法,但这很简单:
scala>(l zip l.tail)map{t=>Range(t.\u 1,t.\u 2)}res25:List[Range]=List(Range(s1 s2),Range(s2,s3),Range(s3,s4))
CheersŁukasz,刚刚看到你把它添加到了你的答案中,很好地使用了元组,做得很好。干杯
scala> val l = List("s1", "s2", "s3", "s4")
l: List[String] = List(s1, s2, s3, s4)

scala> l.dropRight(1) zip l.drop(1)
res4: List[(String, String)] = List((s1,s2), (s2,s3), (s3,s4))