2017-07-25 202 views
0

,我有以下类型的数据:Scala如何对对象字段列表(Object.field)进行排序?

case class TipoDeDato[T] (nombreCampo: String,valor: T) 

在我运动,我需要建立以下结构,采用我所提到的数据类型:

Data Structure

所以,我创建了以下结构

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) 

我的问题是,我怎么可以对“Libros”对象,其任何组件,“作者日期”,“TITULO”,“德NÚMEROpaginas”?是这样的结构足够我需要什么去做?

+0

你的问题没有很好的定义:首先,你正在排序不同的数据类型(在例子中 - 'Int'和'String' - 如何定义排序顺序?例如。比“HGabo”大752还是小?第二,如何定义这些项目的排序顺序?最长的列表最短?列表的最大值的顺序? –

+0

嗨,我需要排序,按字段“新的TipoDeDato [Int](”Numero de Paginas“,752)”,例如。我不知道是否有这种可能的海洋资料结构,或者我是否必须改变它。 – jamlhet

+0

嗨,我改变它。我有列表清单,如何通过“NumeroDePaginas”对象排序? – jamlhet

回答

1

排序ListList的:

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)) 

其实我觉得你需要:

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) 

而且,如果这个问题需要功能的编程(没有副作用的,也是我摆脱OOP - 但后者不是强制性的,OOP和FP是正交的):

case class TablaItems(registros: List[Dato]) 

implicit class TablaItemsOperations(tabla: TablaItems){ 
    def withData(reg: List[Dato]) = TablaItems(tabla.registos :: reg) 
} 

... 


val tablaLibros = TablaItems(Registros1) 
tablaLibros.registros.foreach(println) 
println("----") 
val tablaLibrosUpdated = tablaLibros.withData(Registros2) 
tablaLibrosUpdated.registros.foreach(println) 
println("----") 
tablaLibrosUpdated.registros.sortBy(_.numeroDePaginas) 
+0

哇!你是最棒的,非常感谢你!请原谅我糟糕的英语:( – jamlhet

+0

没问题!谢谢你的西班牙语课:) – dk14

+0

嗯,如果我想列表由“Titulo”[字符串]或“作者”[字符串]列表列表? – jamlhet

相关问题