如何为列表映射索引列表并保留未更改的元素?
How to map a List of indices for a List and preserve unchanged elements?
所以我在 Scala 中遇到了这个问题,它可能可以通过循环轻松解决,但我正在努力为它找到最 优雅 的解决方案。 也许甚至一个班轮。
我有一个子列表的根列表。我需要在子列表的开头为根列表的每个索引插入一个元素。
所以根列表将开始看起来像这样:
List0
element
element
element
List1
element
element
List2
element
element
element
并且在通过我们的函数placeAtZero(List(0, 2), newElement)
(索引列表,elementToInsert)后变为:
List0
newElement
element
element
element
List1
element
element
List2
newElement
element
element
element
您可以尝试映射一个索引列表并从根列表中取出一个元素并以这种方式添加到前面。但是,然后您丢失了所有未更改的索引,您将如何以最 elegant/efficient 的方式保留它们?
def placeAtZero(in: List[List[Elem]], indices: Set[Int], elem: Elem) =
in.zipWithIndex.collect {
case (list, idx) if indices(idx) => elem::list
case (list, _) => list
}
编辑 如评论中所建议,在这种情况下可以将 .collect
替换为 .map
,如果您更喜欢的话。
所以我在 Scala 中遇到了这个问题,它可能可以通过循环轻松解决,但我正在努力为它找到最 优雅 的解决方案。 也许甚至一个班轮。
我有一个子列表的根列表。我需要在子列表的开头为根列表的每个索引插入一个元素。
所以根列表将开始看起来像这样:
List0
element
element
element
List1
element
element
List2
element
element
element
并且在通过我们的函数placeAtZero(List(0, 2), newElement)
(索引列表,elementToInsert)后变为:
List0
newElement
element
element
element
List1
element
element
List2
newElement
element
element
element
您可以尝试映射一个索引列表并从根列表中取出一个元素并以这种方式添加到前面。但是,然后您丢失了所有未更改的索引,您将如何以最 elegant/efficient 的方式保留它们?
def placeAtZero(in: List[List[Elem]], indices: Set[Int], elem: Elem) =
in.zipWithIndex.collect {
case (list, idx) if indices(idx) => elem::list
case (list, _) => list
}
编辑 如评论中所建议,在这种情况下可以将 .collect
替换为 .map
,如果您更喜欢的话。