Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
List Scala:为列表中的匿名对象指定名称_List_Scala_Dictionary_Object - Fatal编程技术网

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

列表中的数据是动态的还是静态的?如果是静态的,您可以自己定义变量,或者编写一个宏(如果您愿意)。如果它们是动态的,那么您不能简单地创建新成员,如果您不知道将存在哪些成员,您将如何使用它们?列表中的数据是动态的还是静态的?如果是静态的,您可以自己定义变量,或者编写一个宏(如果您愿意)。如果它们是动态的,那么您不能简单地创建新成员,如果您不知道将存在哪些成员,您将如何使用它们?