Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:表示相同类型对象之间1:1、1:M、M:1和M:M关系的数据结构_Scala_Data Structures_Many To Many_Relation_Many To One - Fatal编程技术网

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

Scala:表示相同类型对象之间1:1、1:M、M:1和M:M关系的数据结构,scala,data-structures,many-to-many,relation,many-to-one,Scala,Data Structures,Many To Many,Relation,Many To One,在比较基因组学中,识别两个基因组中的同源基因[被认为具有类似功能的基因]在各种应用中都很重要。这两个基因组中的这些基因之间的关系可以是1:1、1:M、M:1和M:M。在Scala中,我编写了这个简单的case类来表示一个基因: case class Gene(id: Int, protId: String, geneId: String) 此函数用于执行映射: def orthologyMapping(genome1: Array[Gene], genome2: Array[Gene]): V

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

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]],该向量包含一组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:

HashMap的使用实际上并没有捕捉到关系的真实性;我现在使用的快速而肮脏的解决方案是Vector[List[List[Gene],List[Gene]]],作为orthologyMapping()函数的返回类型,quiver在我的例子中确实有效;虽然我在寻找更简单、更原始的scala。我最初的想法是使返回类型向量[HashMap[List[Gene],List[Gene]]],因为在每个HashMap中,键和值列表都不能为空[两者都可以至少有on项]