我找不到包含数据类的哈希集数组的交集(我希望通过标识符交叉):
class Protein(val id: String, val score: Double, val molw: Double, val spc: Int)
我已经将.csv文件中的一些数据提取到这种类型的结构中:
ArrayList<HashSet<Protein>>
所以我有六个数组列表[每个csv 1个],每个包含一个包含数千个蛋白质结构的散列集 . 这是我到目前为止尝试获得基于常见Protein.id的交集HashSet:
fun intersection(data: ArrayList<HashSet<Protein>>): HashSet<Protein> {
val intersectionSet = HashSet<Protein>(data[0])
for (i in 1..data.size) {
intersectionSet.retainAll(data[i])
}
return intersectionSet
}
这将返回一个空列表,这是有道理的,因为它正在尝试与Protein对象相交并将每个条件作为一个整体进行匹配 .
如何将数据[i] .id称为我的交叉标准?我对Kotlin和数据类很新:)
2 回答
如果在
Protein
类中添加hashCode
和equals
函数的定义,如下所示,则HashSet
将能够使用id
字段正确检查交集 .此外,您可能希望将
intersection
函数中的循环范围更改为1..(data.size-1)
而不是1..data.size
,以避免超出范围 . 或者你可以按功能编写如下:要简化给定的答案,您可以使用
apply
: