繁体   English   中英

列出Scala中的串联操作

[英]List concatenation operations in Scala

在Scala中,有两个操作可用于从其他List对象创建列表:conc(:: :)和cons(::)

:::展平输入列表中的元素。

val fruits = List("Mango","Apple","Grapes");
val veggies = List("Potato","Brinjal","Jackfruit")
val conc = fruits:::veggies

conc是List(“ Mango”,“ Apple”,“ Grapes”,“ Potato”,“ Brinjal”,“ Jackfruit”)。 由于原始列表是不可变的,这并不意味着现在我们已经有重复的数据了吗?

在::的情况下,会发生:

val fruits = List("Mango","Apple","Grapes");
val veggies = List("Potato","Brinjal","Jackfruit")
val cons = fruits::veggies

缺点是List(List(“ Mango”,“ Apple”,“ Grapes”),“ Potato”,“ Brinjal”,“ Jackfruit”)缺点中的第一个元素只是对水果的引用,因此重复可以忽略不计。但是最后三个条目再次是来自蔬菜的主要重复。

在Scala中,有两个操作可用于从其他List对象创建列表:conc(:: :)和cons(::)

没有。

只有第一个是用于从List对象创建的。 缺点是从对象创建。

由于列表本身就是对象,因此可以将一个列表作为元素放入另一个列表中,但是在几乎所有情况下,您都不想这样做。

scala> val fruits = List("Mango","Apple","Grapes");
fruits: List[String] = List(Mango, Apple, Grapes)

scala> val veggies = List("Potato","Brinjal","Jackfruit")
veggies: List[String] = List(Potato, Brinjal, Jackfruit)

scala> val cons = fruits::veggies
cons: List[java.io.Serializable] = List(List(Mango, Apple, Grapes), Potato, Brinjal, Jackfruit)

看,第三个列表的类型如何变化:它是[java.ioSerializable]的列表,它是List和String的第一个共同祖先,由编译器发现。 cons.size为4,而不是6:以水果清单为第一个元素,并包含3个蔬菜。

由于原始列表是不可变的,这并不意味着现在我们已经有重复的数据了吗?

是(不是)。

scala> val fruits = List ("Mango","Apple","Grapes");
fruits: List[String] = List(Mango, Apple, Grapes)

scala> val veggies = List ("Potato","Brinjal","Jackfruit")
veggies: List[String] = List(Potato, Brinjal, Jackfruit)

scala> val conc = fruits ::: veggies
conc: List[String] = List(Mango, Apple, Grapes, Potato, Brinjal, Jackfruit)

您得到的,所要的东西和水果是不可变的,因此您无法在其上添加蔬菜,因此无法解决。

缺点中的第一个要素似乎仅是指水果,因此可以忽略不计。 但是最后三个条目再次是来自蔬菜的主要重复。

第一个元素是水果的第一个元素的引用,第二个元素是蔬菜的头的引用,因为两个列表都是不可变的。 但是,指向Nil的水果的最后一个元素不能更改为指向素食者的头,因为这会改变水果,因此被禁止。

但是,在scala.collection.mutable中有可变列表,可以在适当位置进行修改。

在许多情况下,您不需要担心内存。 3个列表,2个原始列表和组合列表大部分是指向String的链接(它们也不需要存储整个String,因为String也是不可变的),并且每个元素都有指向下一个元素的链接。名单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM