0

作成した圧縮リストをケース クラスにマージしようとすると問題が発生します。私は Scala にかなり慣れていないので、この問題に頭を悩ませているようです。ここに私がこれまで持っているものがあります:

type Name = String
type Number = String
type Mark = Int
type Rank = Int
type Nationality = String
val Ran = new scala.util.Random

case class Student(name:Name, id: Number, nat:Nationality)
case class StExam(name:Name,id:Number)
case class StMark(id:Number, mark:Mark)
case class Result(name:Name, mark:Mark, rank:Rank)

これらは、定義済みのタイプとケース クラスです。

def marks(ls:List[String]):List[StMark] = {
  val r = new scala.util.Random
  val k = 1 to 20 map { _ => r.nextInt(100) } 
  k.toList
    val f = ls.zip(k)
    f.toList
    val l:List[StMark] = f
    l.sortBy(x => x.mark)
}

そして、ここに私が書いた関数があります。私がやろうとしているのは、文字列型のリストを取り、乱数のリストを作成してから、ケースクラスの一部として2つのリストをマージすることですStMark

4

1 に答える 1

1

あなたがしているようなエイリアシングtypeは非常に悪い考えです。デフォルトについては、デフォルトに固執します。

object Test {
  val Ran = new scala.util.Random

  case class Student(name: String, id: String, nat: String)
  case class StExam(name: String, id: String)
  case class StMark(id: String, mark: Int)

  object StMark {
    def apply(tp: (String, Int)): StMark = StMark(tp._1, tp._2)
  }
  case class Result(name: String, mark: Int, rank: Int)

  def marks(ls: List[String]): List[StMark] = {
    val r = new scala.util.Random
    val k = 1 to 20 map { _ => r.nextInt(100) } toList
    val f = ls.zip(k).toList map { (x: (String, Int)) => StMark(x) }
    f.sortBy(_.mark)
  }
}

何かが欠けています。toList操作が適切に実行されていません。

f.toList // returns a new object, it is not updating f itself.
// it's useless in your current code.
于 2013-11-10T15:53:00.380 に答える