如何将序列seq1中的0值替换为序列seq2对应索引的元素?
替换序列中指定位置元素的Scala实现
给定两个序列:
val seq1 = Seq(1, 0, 3, 0) val seq2 = Seq(10, 20, 30, 40)
需要将seq1中的0替换为seq2对应索引位置的元素,最终得到Seq(1,20,3,40)。以下是几种简洁的实现方式:
方法一:使用zip + map
这是最直接的方案,利用zip将两个序列对应位置的元素配对,再通过map遍历处理每个配对元素:
val result = seq1.zip(seq2).map { case (elem1, elem2) => if (elem1 == 0) elem2 else elem1 }
zip会把两个序列的元素按索引一一配对成元组,比如(1,10)、(0,20)等- 遍历每个元组时,判断
seq1的元素是否为0,是则取seq2对应元素,否则保留原元素
方法二:处理序列长度不一致的情况
如果seq1和seq2长度可能不同,可以用zipAll来避免元素丢失,指定长度不足时的默认值:
// 当seq1更短时,补0;seq2更短时,补0(可根据需求调整默认值) val result = seq1.zipAll(seq2, 0, 0).map { case (elem1, elem2) => if (elem1 == 0) elem2 else elem1 }
内容的提问来源于stack exchange,提问作者IUnknown
相关产品推荐
相关产品推荐

