作为 Scala 的初学者,我偶然发现了一个似乎无法解决的问题。基本上,我从我设法添加到列表的文件中获得坐标,然后将所有这些值排序到不同的列表中,如下所示:
List(List(61, 62, 63, 64, 65, 66, 67), List(21, 23, 25, 26, 27))
通过使用此代码:
val lines = io.Source.fromFile("in.txt").getLines
val coordinates =
lines
.drop(0)
.toList
.sortWith(_<_)
.mkString
.replaceAll("\\s", "")
.grouped(2)
.toList
val conditions = 1 to 5000
val que = coordinates.map(_.toInt)
val thisIsIt = conditions.foldLeft(List():List[List[Int]])((acc, elem) =>
que
.filter(_.toString.startsWith(elem.toString))::acc)
.filterNot(_.isEmpty)
.filter(_.length > 3)
.map(_.toList)
我要做的是在每个列表中找到遵循相同模式的坐标。例如,在列表中
List(21, 23, 25, 26, 27)
我想删除元素“26”,因为相邻值之间的差异应该是“2”。
23-21 = 2
25-23 = 2
26-25 = 1,
但是如果我们检查 26 之后的下一个元素与前一个元素 25 之间的差异,我们可以看到:
27-25 = 2
因此,如果删除 26,则每个相邻值之间的差应为“2”的条件变为真,给我们列表
List(21, 23, 25, 27)
另一个列表是:
List(61, 62, 63, 64, 65, 66, 67)
应该只返回相同的列表,因为元素之间的差异是恒定的并且它是“1”。
最后我应该把名单还给我
List(List(61, 62, 63, 64, 65, 66, 67), List(21, 23, 25, 27))
我将用列表举另一个例子
List(31, 32, 33, 36, 37)
虽然前 3 个元素之间的差异确实是“1”,并且对于最后 2 个元素之间的差异也可以这样说,但是没有办法从列表的开头遍历到列表的末尾,并且值之间的差异是恒定的.
坐标可以改变,每个列表中的值的数量也可以改变。任何帮助将不胜感激,因为我已经死了。我尝试使用使用head和tail的函数,遍历列表并应用条件,但似乎没有任何效果。
提前致谢!