Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala如何按对象字段(Object.field)对对象列表进行排序?_Scala_List_Object - Fatal编程技术网

Scala如何按对象字段(Object.field)对对象列表进行排序?

Scala如何按对象字段(Object.field)对对象列表进行排序?,scala,list,object,Scala,List,Object,我有以下类型的数据: case class TipoDeDato[T] (nombreCampo: String,valor: T) 在我的练习中,我需要使用我提到的数据类型创建以下结构: 因此,我创建了以下结构 val registro0: List[TipoDeDato[_>: String with Int]] = List( new TipoDeDato[String]("Autor", "Gabo"), new TipoDeDato[String]("Tit

我有以下类型的数据:

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)
我的问题是,如何按Libros对象的任何组件Autor、Titulo、Numero de paginas对Libros对象进行排序?此结构是否足以满足我需要执行的操作?

要对列表进行排序:

事实上,我认为你需要:

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)

您的问题没有很好地定义:首先,您在示例中对不同的数据类型进行排序-Int和String-排序顺序是如何定义的?例如,752是否大于或小于HGabo?第二,如何定义这些项目列表的顺序?从最长列表到最短列表?列表最大值的顺序?嗨,我需要排序,按字段new TipoDeDato[Int]页码,752,举例说明。我不知道是否有这种可能的sea数据结构,或者我是否必须改变它。嗨,我改变了它。我有一个列表列表,如何按NumeroDePaginas对象排序?顺便说一句,实例化case类不需要做新的工作。TipoDeDatoAutorHGabo也足够让TipoDeDato成为一种特质:密封特质TipoDeDato;case class Autor Autor:String扩展了TipoDeDato。。。。这将大大简化您的代码,尤其是类型签名哇!你是最棒的,非常感谢!请原谅我糟糕的英语:没问题!谢谢你的西班牙语课:嗯,如果我想按Titulo[String]或Autor[String]对列表进行排序?@jamlhet tablaLibros.registros.sortWith_uuz.Autor<\ux。autor@jamlhet您可以在此处获得更多信息:
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)