您好我正在尝试按字母顺序按列排序矩阵
我试过这个:这只是我试过的气泡 var artists2 = Array.ofDimString //艺术家姓名,年份
var compare=0
var aux2=""
for(i <- 0 to 99){
for(j <- 0 to 993){
compare = artists(j)(0).compareTo(artists(j+1)(0))
if (compare < 0) { //a is smaller b>a
aux2=artists(j)(0)
artists(j)(0)=artists(j+1)(0)
artists(j+1)(0)=aux2
aux2=artists(j)(1)
artists(j)(1)=artists(j+1)(1)
artists(j+1)(1)=aux2
}
}
}
println(artists.map(_.mkString(" ")).mkString("\n"))
但我得到一个空指针Exception我知道这不适合使用字符串所以如果你有任何建议请让我知道我的矩阵有tu colums艺术家和多年我想要由艺术家专栏排序但仍然保存每个艺术家年
答案 0 :(得分:2)
如果要对数组进行排序,只需在Scala中调用scala> val artists = Array(("ArtistA",1987), ("ArtistC", 1545), ("ArtistB", 2014))
artists: Array[(String, Int)] = Array((ArtistA,1987), (ArtistC,1545), (ArtistB,2014))
scala> artists.sortBy(_._1)
Array[(String, Int)] = Array((ArtistA,1987), (ArtistB,2014), (ArtistC,1545))
方法即可。
Array[(String, Int)]
在这种情况下,您的数据不是Array[Array[String]]
类型,而是2D数组。请注意,与元组不同,2D数组不支持多种类型(您可以将它们的类型丢失为“任意”)。因此,数组的类型为val d2 = Array(Array("ArtistA","ArtistC","ArtistB"), Array("1987", "1545", "2014"))
d2: Array[Array[String]] = Array(Array(ArtistA, ArtistC, ArtistB), Array(1987, 1545, 2014))
val sorted = d2(0).zip(d2(1)).sortBy(_._1).unzip
sorted: (Array[String], Array[String]) = (Array(ArtistA, ArtistB, ArtistC),Array(1987, 2014, 1545))
。
zip
这里的想法是你首先使用String.metaClass.when
打破2D数组来创建一个元组数组。接下来你对它进行排序,最后你解压缩它。