I saw that, but when I went back to review it, I started getting lost. I'm
not as smart as you.

Thanks,

-- 
Raul



On Tue, Jul 1, 2014 at 7:06 AM, Joe Bogner <[email protected]> wrote:

> Raul, thanks for sharing. I also used key in my approach:
> http://jsoftware.com/pipermail/programming/2014-June/037869.html
>
> Yours is much simpler and was enjoyable to study.
>
>
> On Tue, Jul 1, 2014 at 12:40 AM, Raul Miller <[email protected]>
> wrote:
>
> > On Mon, Jun 30, 2014 at 10:54 PM, Dan Bron <[email protected]> wrote:
> > > My wording was ambiguous - sorry about that. The fundamental approach
> > would
> > > be the same whether the data are numeric or boxed or anything else.
>  That
> > > is, the natural and straightforward way to create a value table from a
> > > list of index-value pairs is to first construct a table of
> placeholders,
> > > and then populate it with valid values using } .
> >
> > Another natural way of generating a value table uses key.
> >
> > You wind up having to use key, also, if you somehow have multiple
> relevant
> > values for the same index.
> >
> > What you do is prefix your index-value pairs with the full set of indices
> > in canonical order each paired with the default. And your key function
> > deals with each instance of the resulting sequences.
> >
> > For this problem, you would wind up doing that twice - first to form what
> > will be the rows, and then again to form the columns.
> >
> > Then again, for this example, we don't actually have any actual cases
> where
> > we have multiple values that go in the same row, nor in the same column,
> so
> > this approach might be overkill. Nevertheless, here's an example of what
> > this kind of implementation might look like:
> >
> > ids=: /:~ ~.1 {"1 data
> > dts=: ":&.> i.1+>./_ ".&>{."1 data
> >
> > gather=:2 :0
> > :
> >   ({."1 u@}./. v"1)(x,.a:),y
> > )
> >
> >    dts (ids {. gather {: ])gather}. data
> > ┌──┬──┬──┬──┐
> > │4 │3 │  │  │
> > ├──┼──┼──┼──┤
> > │  │5 │9 │  │
> > ├──┼──┼──┼──┤
> > │6 │  │  │  │
> > ├──┼──┼──┼──┤
> > │10│  │  │  │
> > ├──┼──┼──┼──┤
> > │  │  │  │  │
> > ├──┼──┼──┼──┤
> > │  │  │10│  │
> > ├──┼──┼──┼──┤
> > │  │  │  │  │
> > ├──┼──┼──┼──┤
> > │  │10│  │10│
> > ├──┼──┼──┼──┤
> > │  │  │  │  │
> > ├──┼──┼──┼──┤
> > │  │  │20│  │
> > ├──┼──┼──┼──┤
> > │  │11│  │  │
> > ├──┼──┼──┼──┤
> > │  │  │  │  │
> > ├──┼──┼──┼──┤
> > │  │  │  │  │
> > ├──┼──┼──┼──┤
> > │15│  │  │  │
> > ├──┼──┼──┼──┤
> > │  │12│  │  │
> > └──┴──┴──┴──┘
> >
> > Breaking that down:
> >    dts (ids {. gather {: ])gather}. data
> >
> > I'm using }. when gathering the rows because the "dates" are the first
> > column of 'data'. So here's a perspective on what the inner gather deals
> > with.
> >
> >    dts <gather}. data
> >
> > (Run this yourself - it would line wrap in email, rendering it
> illegible.)
> >
> > The inner gather then uses {: to grab the final element from each row of
> > data, this becomes the data in the result.
> >
> > Also, I'm using {. for the inner gather to discard any extra values. If I
> > had multiple values to combine, this would be the combining function.
>  If I
> > wanted to be robust I'd probably instead use something like <@(;:inv) for
> > this kind of data.
> >
> > FYI,
> >
> > --
> > Raul
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to