2017-07-25 205 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

相關問題