Dynamic / resizable array type, and a crash problem

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 15 12:23:49 PDT 2015


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.


More information about the Digitalmars-d-learn mailing list