Scala:表示相同类型对象之间1:1、1:M、M:1和M:M关系的数据结构

Scala: Data structure for the representation of 1:1, 1:M, M:1, and M:M relationships between objects of the same type

在比较基因组学中,鉴定两个基因组中的同源基因 [被认为具有相似功能的基因] 在各种应用中都很重要。来自两个基因组的这些基因之间的关系可以是1:1、1:M、M:1和M:M。在 Scala 中,我写了这个简单的案例 class 来表示一个基因:

case class Gene(id: Int, protId: String, geneId: String)

和这个函数来做映射:

def orthologyMapping(genome1: Array[Gene], genome2: Array[Gene]): Vector[HashMap[Gene, Gene]] = { ...

我在文档中找不到这种特定类型的映射关系集合的任何内置类型。可以看到,orthologyMapping() return类型是Vector[HashMap[Gene, Gene]],那个Vector包含一堆1:1关系的HashMap

HashMap[T,U]表示M:1关系,例如(a -> 1),(b -> 1)。要表示 M:M 关系,您可以使用 HashMap[Gene, Set[Gene]]。这可以模拟 M:M 关系,例如(a -> (1,2)),(b -> (1,2))

您是否考虑过将这组关系建模为图表?因为这对我来说似乎很自然。如果您想要一个随时可用的库,请查看 Verizon 的 OnCue 团队的 Quiver: https://verizon.github.io/quiver/