Re: A list based table join?
- To: mathgroup at smc.vnet.net
- Subject: [mg112972] Re: A list based table join?
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 8 Oct 2010 04:50:38 -0400 (EDT)
On 10/7/10 at 3:39 AM, leoditolaghi at gmail.com (Leo Ditolaghi) wrote:
>If I have two lists, how do I determine the indices at which the 1st
>list elements are matched by the elements of the second, and then
>use these matching indices to extract corresponding columns in the
>1st list (sort of a simulated database join)? I.e.,
>x = {{"hello", 27},
>{"bye", 30},
>{"hello", 54},
>{"seeya", 100},
>{"hi", 9}}
>y = {"hello", "hi"}
>where x is the source table, and y is the select criteria (so to
>speak.)
>I wish to produce z, where y defines which elements of x to extract:
>z = {27,54,9}
Here are a few ways to get the result you want:
In[3]:= x = {{"hello", 27}, {"bye", 30}, {"hello", 54}, {"seeya",
100}, {"hi", 9}};
y = {"hello", "hi"};
In[5]:= Cases[x, {_?(MemberQ[y, #] &), _}][[All, 2]]
Out[5]= {27,54,9}
In[6]:= Select[x, MemberQ[y, First[#]] &][[All, 2]]
Out[6]= {27,54,9}
In[7]:= Cases[x, {Alternatives @@ y, _}][[All, 2]]
Out[7]= {27,54,9}