给定List[Int]Scala 中的 a ,我希望得到至少出现次数Set[Int]的所有s 。我可以使用or , then来做到这一点。例如:IntthreshgroupByfoldLeftfilter
val thresh = 3
val myList = List(1,2,3,2,1,4,3,2,1)
myList.foldLeft(Map[Int,Int]()){case(m, i) => m + (i -> (m.getOrElse(i, 0) + 1))}.filter(_._2 >= thresh).keys
会给Set(1,2)。
现在假设List[Int]非常大。很难说有多大,但无论如何这似乎很浪费,因为我不关心每个Ints 频率,我只关心它们是否至少是thresh. 一旦它通过thresh了,就不需要再检查了,只需Int将Set[Int].
问题是:对于一个非常大的,我可以更有效地做到这一点List[Int],
a) 如果我需要一个真实、准确的结果(没有出错的余地)
b) 如果结果可以是近似的,例如通过使用一些散列技巧或布隆过滤器,其中Set[Int]可能包含一些误报,或者 {the frequency of an Int> thresh} 是否真的不是 aBoolean而是 a Doublein [0-1]。