Scalaのコードがいくつかありますが、私が望む方法でオブジェクトを生成する方法を見つけようとしています。戻る。私はScalaには新しく、このユースケースには何が正しいのかよく分からず、出力されたデータからどのようにフォーマットするのかよく分かりません。CSVのArrayBuffer出力をScalaの最適なオブジェクトの1行に返すように変換する
この関数をgetId('1.5')
のように呼び出し、CSVのデータから構築したオブジェクトを取得したいと考えています。 CSVのデータは次のようになります。
,,ID,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,,
0.5,0.295,17.70%,2.70%,0.00%,0.02%,6.17%,0.01%,0.00%,0.00%,32.34%,41.05%,0.00%,,
1,0.34,18.64%,3.83%,0.00%,0.23%,7.67%,0.52%,0.00%,0.00%,30.57%,38.53%,0.00%,,
だから私は戻って戻りデータとしてキーを持つ行を取得することができるようにしたいテーブルに
ID H2 H3
0.5 0.295 17%
を出力します。だから、(一例として、JSONを使用して)getId('0.5')
を要求した後、擬似オブジェクト内:
{
"H2": "0.295",
"H3": "17%"
}
私はval x = getId('1.5')
を言うことができるので、簡単に私のコードベース内の他の場所でそれを使用することができるようにしたいです。その後、x.H3
が17%になる。これは主にループで使用されます。ここに私がこれまで持っているものがあります。
def getId(id: String) = {
val filePath = getClass.getClassLoader.getResource("my_data.csv").getPath
// each row is an array of strings (the columns in the csv file)
val rows = ArrayBuffer[Array[String]]()
// (1) read the csv data
using(io.Source.fromFile(filePath)) { source =>
for (line <- source.getLines) {
rows += line.split(",").map(_.trim)
}
}
// (2) print the results, here I'd actually be constructing that return object...
for (row <- rows) {
println(s"${row(0)} | ${row(2)} | ${row(3)} | ${row(4)}")
}
def using[A <: { def close(): Unit }, B](resource: A)(f: A => B): B =
try {
f(resource)
} finally {
resource.close()
}
}