scalaでテーブル出力
scala-user MLに投稿されていた問題で、
入力: 1, 2, 3, 4, 5, 6, 7 のようなリスト
出力:<table> <tr> <td>1</td> <td>2</td> <td>3</td> </tr> <tr> <td>4</td> <td>5</td> <td>6</td> </tr> <tr> <td>7</td> <td> </td> <td> </td> </tr> </table>となるようなプログラムを作成せよというもの(出力はNodeSeqなので出力を整形するのは不要)。
こんな問題が出ていたので、練習がてら作ってみたお。
def table(n: Int, list: List[Int]): NodeSeq = { def tr(l: List[Int]): NodeSeq = l match { case Nil => Nil case _ => val (c,r) = l.splitAt(n) <tr>{c.map(e => <td>{e}</td>)++ {range(c.length,n).map(_ => <td>&nbsp;</td>)}}</tr> ++ tr(r) } <table>{tr(list)}</table> } println(table(3,List(1,2,3,4,5,6,7)))
Scalaはまだまだ知らんことが沢山あるので、もっと良いやり方があると思うけど。