Re: A list based table join?
- To: mathgroup at smc.vnet.net
- Subject: [mg112965] Re: A list based table join?
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Fri, 8 Oct 2010 04:49:20 -0400 (EDT)
- References: <i8jteq$aco$1@smc.vnet.net>
Am 07.10.2010 09:39, schrieb Leo Ditolaghi: > Hi all, > > (noob Mathematica question:) > > 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} > > I know this should be easy and elegant, but I am going in circles > with list functions. These are short, might qualify as "elegant", I'm not so sure about easy and I'm sure that there are more efficient ways to to this when x or y get large. On the other hand: "premature optimization is the root of all evil" Cases[x, {Alternatives @@ y, val_} :> val] Select[x, MemberQ[y, #[[1]]] &][[All, 2]] hth, albert