Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def collapse[A](set: Set[A])(merge: (A, A) => Option[A]): Set[A] = {
- val (back, _) = set.foldLeft((Set[A](), set)) {
- case ((acc, set), elem) => {
- val set2 = set - elem
- val (merged, set3) = set2.foldLeft((elem, set2)) {
- case ((elem, set2), elem2) =>
- merge(elem, elem2) map { e => (e, set2 - elem2) } getOrElse (elem, set2)
- }
- (acc + merged, set3)
- }
- }
- back
- }
Add Comment
Please, Sign In to add comment