List Scala:为列表中的匿名对象指定名称
我想知道如何按字段命名列表中的对象List Scala:为列表中的匿名对象指定名称,list,scala,dictionary,object,List,Scala,Dictionary,Object,我想知道如何按字段命名列表中的对象 case class age(id: Int,name:String,age:Int) val people: List[age] = List(age(2,"Angela",31),age(3,"Rick",28)) 在这个最小的示例中,我想创建对象Angela和Rick 我最初的想法是: val objects: List[age] = people.map( x => {val x.name = new age(x.name,x.age) })
case class age(id: Int,name:String,age:Int)
val people: List[age] = List(age(2,"Angela",31),age(3,"Rick",28))
在这个最小的示例中,我想创建对象Angela和Rick
我最初的想法是:
val objects: List[age] = people.map( x => {val x.name = new age(x.name,x.age) })
当然,val x.name不起作用,因为在变量名中不能使用变量名
这不是项目中的实际问题,而是我一直坚持的一个概念。一个简单的解决方案是使用地图:
case-class-Person(id:Int,name:String,age:Int)
瓦尔人:名单[人]=名单(人(2,“安吉拉”,31岁),人(3,“里克”,28岁))
val peopleByName:Map[String,Person]=people//List[Person]
.map(p=>(p.name,p))//列表[(字符串,人)]
.toMap//Map[String,Person]
或者,从映射开始,而不是从列表开始:
案例类人员(id:Int,年龄:Int)
val peopleByName:Map[字符串,Person]=Map(
“安吉拉”->人物(2,31),/(字符串,人物)
“瑞克”->人(3,28)/(字符串,人)
)//映射[String,Person]
但是,如果您想在运行时定义成员,那么您必须扩展动态
特性(来自的代码片段,导入是我的(必需的,否则编译器不会满意)):
导入scala.language.dynamics
类DynImpl扩展了动态{
def selectDynamic(名称:字符串)=名称
}
scala>val d=new DynImpl
d:DynImpl=DynImpl@6040af64
scala>d.foo
res37:String=foo
scala>d.bar
res38:String=bar
scala>d.selectDynamic(“foo”)
res54:String=foo
如果您真的想这样做,那么我建议您采用以下实施方式:
类DynamicPeople(peopleByName:Map[String,Person])扩展了动态{
def selectDynamic(名称:字符串)=peopleByName(名称)
}
一个简单的解决方案是使用地图:
case-class-Person(id:Int,name:String,age:Int)
瓦尔人:名单[人]=名单(人(2,“安吉拉”,31岁),人(3,“里克”,28岁))
val peopleByName:Map[String,Person]=people//List[Person]
.map(p=>(p.name,p))//列表[(字符串,人)]
.toMap//Map[String,Person]
或者,从映射开始,而不是从列表开始:
案例类人员(id:Int,年龄:Int)
val peopleByName:Map[字符串,Person]=Map(
“安吉拉”->人物(2,31),/(字符串,人物)
“瑞克”->人(3,28)/(字符串,人)
)//映射[String,Person]
但是,如果您想在运行时定义成员,那么您必须扩展动态
特性(来自的代码片段,导入是我的(必需的,否则编译器不会满意)):
导入scala.language.dynamics
类DynImpl扩展了动态{
def selectDynamic(名称:字符串)=名称
}
scala>val d=new DynImpl
d:DynImpl=DynImpl@6040af64
scala>d.foo
res37:String=foo
scala>d.bar
res38:String=bar
scala>d.selectDynamic(“foo”)
res54:String=foo
如果您真的想这样做,那么我建议您采用以下实施方式:
类DynamicPeople(peopleByName:Map[String,Person])扩展了动态{
def selectDynamic(名称:字符串)=peopleByName(名称)
}
不清楚您的意图是什么。是否要创建名为angela
和rick
的变量?对于少量的列表元素和大量的列表元素,您可以手动执行此操作,但这没有意义,因为您将如何使用100个变量?
似乎您正在讨论从名称到属性的一些映射,然后映射可能最适合您
val peopleMap: Map[String,age] = people.map(p => p.name -> p). // this will create list of pairs
toMap // this will turn it to a Map
pritnln(peopleMap("Angela")) // now you can use person name to get all the info about them
不清楚你的意图是什么。是否要创建名为angela
和rick
的变量?对于少量的列表元素和大量的列表元素,您可以手动执行此操作,但这没有意义,因为您将如何使用100个变量?
似乎您正在讨论从名称到属性的一些映射,然后映射可能最适合您
val peopleMap: Map[String,age] = people.map(p => p.name -> p). // this will create list of pairs
toMap // this will turn it to a Map
pritnln(peopleMap("Angela")) // now you can use person name to get all the info about them
列表中的数据是动态的还是静态的?如果是静态的,您可以自己定义变量,或者编写一个宏(如果您愿意)。如果它们是动态的,那么您不能简单地创建新成员,如果您不知道将存在哪些成员,您将如何使用它们?列表中的数据是动态的还是静态的?如果是静态的,您可以自己定义变量,或者编写一个宏(如果您愿意)。如果它们是动态的,那么您不能简单地创建新成员,如果您不知道将存在哪些成员,您将如何使用它们?