複数のcolmuns(10列以上)をスカラー言語でソートする方法。例えば :複数のcolmuns(10列以上)をスカラー言語でソートする方法は?
1 2 3 4
4 5 6 3
1 2 1 1
2 3 5 10
所望の出力
1 2 1 1
1 2 3 3
2 3 5 4
4 5 6 10
複数のcolmuns(10列以上)をスカラー言語でソートする方法。例えば :複数のcolmuns(10列以上)をスカラー言語でソートする方法は?
1 2 3 4
4 5 6 3
1 2 1 1
2 3 5 10
所望の出力
1 2 1 1
1 2 3 3
2 3 5 4
4 5 6 10
val input = io.Source.fromFile("junk.txt") // open file
.getLines // load all contents
.map(_.split("\\W+")) // turn rows into Arrays
.map(_.map(_.toInt)) // Arrays of Ints
val output = input.toList // from Iterator to List
.transpose // swap rows/columns
.map(_.sorted) // sort rows
.transpose // swap back
output.foreach(x => println(x.mkString(" "))) // report results
注:これは、数字の間に空白を使用できますが、それは他のセパレータ(カンマなど)を検出した場合または行が空白で始まる場合に予想されるArray[Int]
を作成するのに失敗します。
また、行がすべて同じサイズでない場合は、transpose
がスローします。
Iは、以下のアルゴリズムに従いました。まず、行と列の次元を変更します。その後、行をソートし、元の行と列の構成を元に戻すために次元を再度変更します。ここに、概念実証のサンプルがあります。
object SO_42720909 extends App {
// generating dummy data
val unsortedData = getDummyData(2, 3)
prettyPrint(unsortedData)
println("----------------- ")
// altering the dimension
val unsortedAlteredData = alterDimension(unsortedData)
// prettyPrint(unsortedAlteredData)
// sorting the altered data
val sortedAlteredData = sort(unsortedAlteredData)
// prettyPrint(sortedAlteredData)
// bringing back original dimension
val sortedData = alterDimension(sortedAlteredData)
prettyPrint(sortedData)
def alterDimension(data: Seq[Seq[Int]]): Seq[Seq[Int]] = {
val col = data.size
val row = data.head.size // make it safe
for (i <- (0 until row))
yield for (j <- (0 until col)) yield data(j)(i)
}
def sort(data: Seq[Seq[Int]]): Seq[Seq[Int]] = {
for (row <- data) yield row.sorted
}
def getDummyData(row: Int, col: Int): Seq[Seq[Int]] = {
val r = scala.util.Random
for (i <- (1 to row))
yield for (j <- (1 to col)) yield r.nextInt(100)
}
def prettyPrint(data: Seq[Seq[Int]]): Unit = {
data.foreach(row => {
println(row.mkString(", "))
})
}
}
質問は不明です。何を試しましたか?列をどのように読んでいますか(例:ファイルから)あなたのコードを投稿することを忘れないでください:) –
はい。テキストファイルから区切り記号はスペースです – mop
あなたが試したコードを投稿してください。あなたは最初に試して、あなたが遭遇した問題を教えてください。 – djsumdog