在Kotlin中,有没有一种简单的方法可以将Double
的列表分成两个对的列表?
以这种方式:
[x1, y1, x2, y2, x3, y3] => [(x1, x2), (x2, x3), (x3, x1)], [(y1, y2), (y2, y3), (y3, y1)]
我尝试使用filterIndexed
和zipWithNext
val x = filterIndexed { index, _ -> index % 2 == 0 }.zipWithNext()
val y = filterIndexed { index, _ -> index % 2 == 1 }.zipWithNext()
但结果是:
[x1, y1, x2, y2, x3, y3] => [(x1, x2), (x2, x3)], [(y1, y2), (y2, y3)]
3条答案
按热度按时间kt06eoxx1#
如果我没有理解错的话,您使用的
zipWithNext
的问题在于它没有"回绕",也就是说,没有输出最终的(x3,x1)或(y3,y1)对,包含列表的最后一个元素和第一个元素。您只需声明自己的
zipWithNext
版本就可以解决这个问题。你可以这样做:
或者复制并粘贴到
zipWithNext
的原始源代码上,并稍微修改一下:用法:
注意,这将遍历列表两次,您可以通过编写自己的
partition
版本partitionIndexed
来避免这种情况。代码可能类似于:
8yparm6h2#
你可以这样做:
mccptt673#
输出: