Created
January 22, 2013 02:25
-
-
Save adam-singer/4591552 to your computer and use it in GitHub Desktop.
Map reduce example in dart
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
String sortedKey(List couple) { | |
couple.sort(); | |
return Strings.concatAll(couple); | |
} | |
List mapper(Map m) { | |
var res = []; | |
for (var person in m.keys) { | |
var friends = m[person]; | |
for (var friend in friends) { | |
String key = sortedKey([person, friend]); | |
res.add({'$key': friends}); | |
} | |
} | |
return res; | |
} | |
List intersect(List lists) { | |
var intersections = []; | |
if (lists.length > 1) { | |
for (var f in lists[1]) { | |
if (lists[0].contains(f)) { | |
intersections.add(f); | |
} | |
} | |
} | |
return intersections; | |
} | |
Map reducer(String intermediate_key, List intermediate_value_list) { | |
Map intersection = {}; | |
intersection[intermediate_key] = intersect(intermediate_value_list); | |
return intersection; | |
} | |
void main() { | |
Map m = {'A': ['B','C','D'], | |
'B': ['A','C','D','E'], | |
'C': ['A','B','D','E'], | |
'D': ['A','B','C','E'], | |
'E': ['B','C','D']}; | |
var intermediate = mapper(m); | |
var groups = {}; | |
var group = new Set.from(intermediate.map((v)=>v.keys[0])); | |
for (var g in group) { | |
var items = intermediate.filter((v)=> v.keys[0] == g); | |
groups[g] = []; | |
for (Map i in items) { | |
groups[g].addAll(i.values); | |
} | |
} | |
List reducer_res = []; | |
for (var intermediate_key in group) { | |
reducer_res.add(reducer(intermediate_key, groups[intermediate_key])); | |
} | |
// sort the results; | |
reducer_res.sort((a, b) => a.keys[0].compareTo(b.keys[0])); | |
for (var friendship in reducer_res) { | |
print("${friendship.keys[0][0]} & ${friendship.keys[0][1]} have ${friendship[friendship.keys[0]]} as common friends "); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://www.stevekrenzel.com/articles/finding-friends
https://gist.github.com/184137