most elegant functional way to make a histogram

BBasile via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Aug 21 19:12:40 PDT 2015


On Friday, 21 August 2015 at 20:09:22 UTC, Laeeth Isharc wrote:
> I have four arrays of ints, each array representing a kind of 
> event associated with that int (they all map to the same 
> space).  Each array might have the same number multiple times 
> and each array will be of different length.
>
> So I would like to plot the int line on x axis and show number 
> of times that the number occurs for each array (4 bars for each 
> int).
>
> It's easy to do with loops, but what's best 
> functional/algorithmic way, please?  Brain tired today.  I am 
> trying to use these opportunities to learn the algorithmic way 
> even if loop is more natural.
>
> I could just make four new arrays of ints and use each instead 
> of a loop.  Any better way?
>
> Also, for bucketizing, any thoughts on best way to do using 
> phobos?  (Cos probably I have too many ints and need to bracket 
> them to plot a histogram).
>
> Sorry if this is unclear.
>
>
> Laeeth.

loop-less approach, it consumes an InputRange in a recursive 
function.
Assuming histogramData is a custom InputRange:

---
void upperLevel()
{
     //histogramData = ...
     proc(histogramData);
     // continue once the range is consumed
}

void proc(ref histogramData)
{
     //something with front
     histogramData.popFront;
     if (!histogramData.empty)
         proc(histogramData);
}
---

I don't know if this approach can be used but this is an 
alternative to loops.
Not necessarily the best because local variables in proc() can 
lead to a stack overflow.


More information about the Digitalmars-d-learn mailing list