繁体   English   中英

Scala-创建一个新列表并更新现有列表中的特定元素

[英]Scala - create a new list and update particular element from existing list

我是Scala和新OOP的新手。 创建新列表时,如何更新列表中的特定元素。

val numbers= List(1,2,3,4,5)
val result = numbers.map(_*2) 

我只需要更新第三个元素->乘以2。如何使用map做到这一点?

您可以使用zipWithIndex将列表映射到元组列表,其中每个元素都带有其索引。 然后,将map与模式匹配配合使用-您可以选择第三个元素(索引= 2):

val numbers = List(1,2,3,4,5)
val result = numbers.zipWithIndex.map {
  case (v, i) if i == 2 => v * 2
  case (v, _) => v
}
// result: List[Int] = List(1, 2, 6, 4, 5)

或者,您可以使用patch ,它用提供的子序列替换子序列:

numbers.patch(from = 2, patch = Seq(numbers(2) * 2), replaced = 1)

我认为实现此目的的最清晰方法是使用updated(index: Int, elem: Int) 对于您的示例,可以按以下方式应用它:

val result = numbers.updated(2, numbers(2) * 2)

list.zipWithIndex创建一个带有原始元素的对的列表,左边是原始元素,右边是列表中的索引(索引基于0,因此“第三个元素”位于索引2)。

val result = number.zipWithIndex.map { 
   case (n, 2) => n*2
   case n => n
}

这将创建一个包含这些对的中间列表,然后对其进行映射以进行转换。 一种更有效的方法是使用iterator 迭代器是一个“惰性”迭代器,因此,它不会创建中间容器,而是会一对一地生成对,并将其直接发送到.map

val result = number.iterator.zipWithIndex.map {
  case (n, 2) => n*2
  case n => n
}.toList

第一个也是最重要的scala是FOP,而不是OOP。 您可以通过关键字“ updated”更新列表的任何元素,有关详细信息,请参见以下示例:

签名:-已更新(索引,值)

val numbers= List(1,2,3,4,5)
print(numbers.updated(2,10))

现在,这里的第一个参数是索引,第二个参数是值。 此代码的结果会将列表修改为:List(1、2、10、4、5)。

暂无
暂无

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

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