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

时间:2016-11-24 02:53:23

标签: scala data-structures many-to-many relation many-to-one

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

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

和这个函数来做映射:

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

我在文档中找不到这种特定类型的映射关系集合的任何内置类型。如您所见,orthologyMapping()返回类型是Vector [HashMap [Gene,Gene]],该Vector包含一堆1:1关系的HashMap。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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