- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Nested Lists
I have somehow generated a nested list of columns due to them having been initially grouped. I would like to remove the nesting to have a continuous list of columns I can act on.
Instead of {{:A, :B, :C}, (:D, :E, :F}}, I would like to get to {:A, :B, :C, :D, :E, :F}
Slán
SpannerHead
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Nested Lists
Here's one way, assuming the items inside the outer list are all lists. If they might not be, you just need to add a little more code to handle it.
Names Default to Here( 1 );
this_list = {{:A, :B, :C}, {:D, :E, :F}};
new_list = {};
For Each( {v, i}, this_list,
For Each( {val, idx}, v,
Insert Into( new_list, val )
)
);
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Nested Lists
Had to tweak this. Works now. Thanks.
For Each( {val, idx}, this_list,
Insert Into( new_list, val )
);
Slán
SpannerHead
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Nested Lists
Ah, sorry. I was testing on strings, and I forgot that inserting a list into a list actually inserts the unevaluated items of the list. If you have any columns that are not inside of a nested list, they will be inserted as missing, for example:
Names Default To Here( 1 );
this_list = {{:A, :B, :C}, :D, {:E, :F, :G}};
new_list = {};
For Each( {v, i}, this_list, Insert Into( new_list, v ) );
//{:A, :B, :C, ., :E, :F, :G}
You can solve the issue by using Name Expr():
Names Default To Here( 1 );
this_list = {{:A, :B, :C}, :D, {:E, :F, :G}};
new_list = {};
For Each( {v, i}, this_list, Insert Into( new_list, Name Expr( v ) ) );
//{:A, :B, :C, :D, :E, :F, :G}
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Nested Lists
You just need to concatenate the individual lists;
Names Default To Here( 1 );
l1 = {{:A, :B, :C}, {:D, :E, :F}};
l2 = l1[1] || l1[2];
I suggest you take the time to read the section of the Scripting Guide on the creation and manipulation of Lists.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
Re: Nested Lists
Building on Jim's solution. If you have more than two sublists:
Names Default To Here( 1 );
l1 = {{:A, :B, :C}, {:D, :E, :F}, {:G, :H, :I, :J}};
l3 = {};
for (i = 1, i <= nitems(l1), i++,
insertinto(l3, l1[i]);
);
print(l3);
{:A, :B, :C, :D, :E, :F, :G, :H, :I, :J}