在Scala中对2D字符串数组进行排序

时间:2015-12-17 16:56:50

标签: arrays scala sorting matrix

您好我正在尝试按字母顺序按列排序矩阵

我试过这个:这只是我试过的气泡 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艺术家和多年我想要由艺术家专栏排序但仍然保存每个艺术家年

1 个答案:

答案 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数组来创建一个元组数组。接下来你对它进行排序,最后你解压缩它。