class countedName { string name; int count; } flow findOrMake(writable dir of countedName funnyName, string name) into (countedName result) { result = funnyName[name]; if (!result) { result = (name,0); funnyName[name] = result; } } flow countNames(array of string names) into (dir of countedName countDir) { countDir = (); for (name in names) { countedName cn = findOrMake(countDir, name); cn.count += 1; } } string testData = " This is just some test data. This is not real data. "; array of string testWords = testData.tokens(); dir of countedName countDir = countNames(testWords); print(countDir);