Reading a file of words line by line
Jesse Phillips
Jesse.K.Phillips+D at gmail.com
Thu Jan 16 03:54:46 UTC 2020
On Wednesday, 15 January 2020 at 19:50:31 UTC, mark wrote:
> I really do need a set for the next part of the program, but
> taking your code and ideas I have now reduced the function to
> this:
>
> WordSet getWords(string filename, int wordsize) {
> WordSet words;
> File(filename).byLine
> .map!(line => line.until!(not!isAlpha))
> .filter!(word => word.count == wordsize)
> .each!(word => words[word.to!string.toUpper] = 0);
> return words;
> }
>
> This is also 4x faster than my version that used a regex --
> thanks!
>
> Why did you use string.count rather than string.length?
Your solution is fine, but also
void main () {
auto file = ["word one", "my word", "word"] ;
writeln (uniqueWords(file, 4));
}
auto uniqueWords(string[] file, uint wordsize) {
import std.algorithm, std.array, std.conv, std.functional,
std.uni;
return file
.map!(line => line.until!(not!isAlpha))
.filter!(word => word.count == wordsize)
.map!(word => word.to!string.toUpper)
.array
.sort
.uniq
.map!(x => tuple (x, 0))
.assocArray ;
}
More information about the Digitalmars-d-learn
mailing list