May 15, 2015 Re: Dynamic / resizable array type, and a crash problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to ivoras | On Thursday, 14 May 2015 at 20:50:05 UTC, ivoras wrote: > I'm experimenting to get a feel for the language. Do you have a suggestion about this example code: https://goo.gl/F7LCAg to make it more "D-like", idiomatic? Quoting from the code: > for (int i = 0; i < count; i++) { foreach(i; 0 .. count) > try { > auto choices = markov[current]; [...] > } catch (RangeError e) { > break; > } Don't catch Errors. Use the `in` operator to check if `current` is in `markov`: if(current !in markov) break; Or avoiding double lookup: string[]* choicesp = current in markov; if(choicesp is null) break; auto choices = *choicesp; > int main(string[] args) You cam omit the return type and `args` if you're not going to use them: void main() > foreach (c_line; stdin.byLine()) { > auto line = to!string(c_line); Could use byLineCopy: foreach(line; stdin.byLineCopy) > if (prev_token in markov) { > markov[prev_token] ~= token; > } else { > markov[prev_token] = [token]; > } I think you can just go with appending here: markov[prev_token] ~= token; But I'm not 100% sure about the implications. |
Copyright © 1999-2021 by the D Language Foundation