从 R 转到 Scala(完全新手)。
假设我有两个列表:
val index = List(0,0,1,0,1)
val a = List(1,2,3,4,5)
那么index
可以定义一个从a
到b的自然映射:List[List[Int]]
:
1 -> b(0)
2 -> b(0)
3 -> b(1)
4 -> b(0)
5 -> b(1)
这样:
b = List(List(1,2,4), List(3,5))
一般来说,给定 index
和 a
,在 Scala 中创建 b
的最自然方法是什么?
例如例如,在 R 中我可以这样写:
run_map <- function(index, a) {
map <- function(data, i) {
data[[i]] <- a[which(index == i)]
data
}
Reduce(map, unique(index), list())
}
欢迎任何帮助!
最佳答案
如果您希望一个列表包含索引而另一个列表包含值,那么您可以将它们zip
在一起:
val myMap = (a zip b).toMap
其中 a
包含索引,b
包含值。
但是,如果存在重复索引,那么您需要执行以下操作:
for{
(i, list) <- (a zip b) groupBy (_._1)
} yield (i, list map (_._2))
其中您正在压缩、按索引分组,然后映射列表中的值。该创建的列表包含作为元组的索引和值。
关于r - Scala:通过整数列表定义映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20869764/