有没有办法将嵌套的arrayBuffer
转换为scala中的嵌套数组?我尝试使用toArray
函数,但它没有转换嵌套的arrayBuffers
我有一个Any类型的数组缓冲区,以下是我的样本嵌套
ArrayBuffer(
ArrayBuffer(ArrayBuffer(ArrayBuffer(1, b), 5)))
答案 0 :(得分:1)
以下代码适用于您的特定测试用例。它会转换嵌套的ArrayBuffer
,它们是封闭ArrayBuffer
的第一个元素:
def convert(a: Any): Array[Any] = a match {
case ArrayBuffer(inner @ ArrayBuffer(_*)) => Array(convert(inner))
case ArrayBuffer(head @ ArrayBuffer(_*), tail @ _*) => (convert(head) +: tail).toArray
case arr @ ArrayBuffer(_*) => arr.toArray
}
val result = convert(ArrayBuffer(ArrayBuffer(ArrayBuffer(ArrayBuffer(1, "b"), 5))))
// result is Array(Array(Array(Array(1, "b"), 5)))
也许以上内容可以帮助您找到更通用的解决方案。
答案 1 :(得分:0)
我创建了一个将arraybuffer转换为array的泛型函数。这也处理嵌套的arrayBuffers
def convert(a: ArrayBuffer[Any]): Array[Any] = {
val checkExistance = (x:ArrayBuffer[Any]) => x.zipWithIndex.collect{ case(x,y) if x.isInstanceOf[ArrayBuffer[Any]] => y}.toArray
//filter(x => x.isInstanceOf[ArrayBuffer[Any]])
val arr = checkExistance(a)
for(i <- arr) {
//if (a(i).isInstanceOf[ArrayBuffer[Any]]) {
val m = a(i).asInstanceOf[ArrayBuffer[Any]]
if(checkExistance(m).length > 0) {
a.update(i,(convert(m)).toArray)
}
else {
val n = m.toArray
a.update(i,n)
}
}
a.toArray
}