我有以下类型的数据:
case class TipoDeDato[T] (nombreCampo: String,valor: T)
在我的练习中,我需要使用我提到的数据类型创建以下结构:
所以,我创建了以下结构
val registro0: List[TipoDeDato[_>: String with Int]] = List(
new TipoDeDato[String]("Autor", "Gabo"),
new TipoDeDato[String]("Titulo", "100 Años"),
new TipoDeDato[Int]("Numero de Paginas", 700)
)
val registro1: List[TipoDeDato[_>: String with Int]] = List(
new TipoDeDato[String]("Autor", "Gabo"),
new TipoDeDato[String]("Titulo", "Maria"),
new TipoDeDato[Int]("Numero de Paginas", 1200)
)
val registro2: List[TipoDeDato[_>: String with Int]] = List(
new TipoDeDato[String]("Autor", "Gabo"),
new TipoDeDato[String]("Titulo", "Carrasco"),
new TipoDeDato[Int]("Numero de Paginas", 150)
)
val registro3: List[TipoDeDato[_>: String with Int]] = List(
new TipoDeDato[String]("Autor", "Gabo"),
new TipoDeDato[String]("Titulo", "Oceano"),
new TipoDeDato[Int]("Numero de Paginas", 200)
)
创建" Libros"对象,我做了以下几点:
val Libros: List[List[TipoDeDato[_>: String with Int]]] = List(registro0,registro1,registro2,registro3)
我的问题是,如何对&#34; Libros&#34;进行排序?对象,由其任何组件,&#34; Autor&#34;,&#34; Titulo&#34;,&#34; Numero de paginas&#34;?,这个结构是否适合我需要做的事情?< / p>
答案 0 :(得分:1)
对List
的{{1}}进行排序:
List
其实我觉得你需要:
sealed trait TipoDeDato
case class Autor (autor: String) extends TipoDeDato
case class Titulo (titulo: String) extends TipoDeDato
case class NumeroDePaginas (numeroDePaginas: Int) extends TipoDeDato
class TablaItems(var registros: List[List[TipoDeDato]]){
def insertInto(reg: List[List[TipoDeDato]]): TablaItems = {
registros = registros ::: reg
this
}
}
val registro0: List[TipoDeDato] = List(
Autor("HGabo"),
Titulo("ZLa María"),
NumeroDePaginas(752)
)
val registro1: List[TipoDeDato] = List(
Autor("AGabo"),
Titulo("CLa María"),
NumeroDePaginas(521)
)
val Registros1: List[List[TipoDeDato]] = List(registro0)
val Registros2: List[List[TipoDeDato]] = List(registro1)
val tablaLibros = new TablaItems(Registros1)
tablaLibros.registros.foreach(println)
println("----")
tablaLibros.insertInto(Registros2)
tablaLibros.registros.foreach(println)
println("----")
tablaLibros.registros.sortBy(r=>r.collectFirst{
case NumeroDePaginas(n) => n
}.getOrElse(0))
另外,如果这个问题需要函数编程(没有副作用,我也摆脱了OOP - 但后者不是强制性的,OOP和FP是正交的):
case class Dato(autor: String, titulo: String, numeroDePaginas: Int)
class TablaItems(var registros: List[Dato]){
def insertInto(reg: List[Dato]): TablaItems = {
registros = registros ::: reg
this
}
}
//you can also do (if you prefer) `Dato(author = "HGabo", titulo = "ZLa María", numeroDePaginas = 752)
val registro0 = Dato("HGabo", "ZLa María", 752)
val registro1 = Dato("AGabo", "CLa María", 521)
val Registros1: List[Dato] = List(registro0)
val Registros2: List[Dato] = List(registro1)
val tablaLibros = new TablaItems(Registros1)
tablaLibros.registros.foreach(println)
println("----")
tablaLibros.insertInto(Registros2)
tablaLibros.registros.foreach(println)
println("----")
tablaLibros.registros.sortBy(_.numeroDePaginas)