Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 在Scala上映射数组数组_Arrays_Scala - Fatal编程技术网

Arrays 在Scala上映射数组数组

Arrays 在Scala上映射数组数组,arrays,scala,Arrays,Scala,我有一个数组 val L = Array((1,Array("one", "two")), (2, Array("one", "three"))) 我可以做这个操作 val LL = L.map({case (s,Array(s1,s2))=>(s1,s2,1)}) 我想做同样的事情,但是使用不确定数量的元素数组。例如: val L=Array((1,Array(“一”、“二”、“三”、“四”),(2,Array(“一”、“三”)))。这只是一个例子,所以基本上我想要一个适用于任何数组

我有一个数组

val L = Array((1,Array("one", "two")), (2, Array("one", "three")))
我可以做这个操作

val LL = L.map({case (s,Array(s1,s2))=>(s1,s2,1)})
我想做同样的事情,但是使用不确定数量的元素数组。例如:
val L=Array((1,Array(“一”、“二”、“三”、“四”),(2,Array(“一”、“三”)))
。这只是一个例子,所以基本上我想要一个适用于任何数组的代码,不管它有多少个元素

编辑:我想我找到了一个简单的方法。例如:

val L = Array((1,Array("one", "two", "three")), (2, Array("one", "three")))
val LL = L.flatMap({case (s,contents)=>(contents.map(s=>(s,1)))})

我没有使用
(s1,s2)
而是使用名称内容对其进行了泛化,然后将内部数组内容映射到flatMap中。

使用Java反射的解决方案:

println(
  Array((1, Array("one", "two", "three", "four")), (2, Array("one", "three")))
    .map(_._2)
    .map(arr => {
      val arr1 = new Array[Object](arr.length + 1)
      Array.copy(arr, 0, arr1, 0, arr.length)
      arr1(arr.length) = 1.asInstanceOf[Object]
      arr1
    })
    .map(arrayToTuple)
    .deep
) 
// Array((one,two,three,four,1), (one,three,1))

def arrayToTuple[A <: Object](arr: Array[A]): Product = {
  val clazz = Class.forName("scala.Tuple" + arr.length)
  clazz.getConstructors.apply(0).newInstance(arr: _*).asInstanceOf[Product]
}
println(
数组((1,数组(“一”、“二”、“三”、“四”),(2,数组(“一”、“三”))
.map(u.u 2)
.map(arr=>{
val arr1=新数组[对象](arr.length+1)
Array.copy(arr,0,arr1,0,arr.length)
arr1(arr.length)=1.a安装[对象]
arr1
})
.map(数组元组)
深的
) 
//数组((一,二,三,四,1),(一,三,1))

def ARRAYTOUPLE[A对于
数组((1,数组(“一”、“二”、“三”、“四”)))
,输出应该是什么?与第一个相同,因此(“一”、“二”、“三”、“四”,1)不幸的是,内部数组的长度总是大于21。@SidiAli那么您希望如何拥有元组?有从Tuple2到Tuple22的元组。您应该更好地表述您希望得到的内容。您可以使用嵌套元组、HLists或case类(如果您使用Shapess)。我找到了一种方法,在同一个命令中使用and flatMap和Map。Cf edit@SidiAli输出是
Array((一,一),(二,一),(三,一),(一,一),(三,一))
。只有你才能知道这是否是你想要的。@SidiAli好吧,我很高兴你解决了你的问题,但我想你下次应该试着更好地表述你的问题,因为它不同于你在评论中所写的:“对于你的数组((1,数组(“一”,“二”,“三”,“四”)),输出应该是什么?”与第一个相同,因此(“一”、“二”、“三”、“四”,1)