这是我的非排序交集代码:
NonSortingIntersection[l1_, l2_, test_: SameQ] :=
Module[{res =
Last@Reap[
Scan[Extract[l1,
Position[l1, x_ /; test[x, #], {1}, 1, Heads -> False],
Sow] &, l2]]}, If[res === {}, res, First[res]]]
这是用法:
In[22]:= NonSortingIntersection[l1, l2,
Function[{x, y}, First[x] == First[y]]]
Out[22]= {{{2011, 3, 13}, 1}, {{2011, 3, 16}, 2}, {{2011, 3, 17}, 3}}
请注意,与其他解决方案不同,保证输出的长度不再是l2
. 例如:
In[24]:= Cases[Join[l1, l1], {x_, _} /; MemberQ[Evaluate[Transpose[l2][[1]]], x]]
Out[24]= {{{2011, 3, 13}, 1}, {{2011, 3, 16}, 2}, {{2011, 3, 17},
3}, {{2011, 3, 13}, 1}, {{2011, 3, 16}, 2}, {{2011, 3, 17}, 3}}
In[25]:= NonSortingIntersection[Join[l1, l1], l2,
Function[{x, y}, First[x] == First[y]]]
Out[25]= {{{2011, 3, 13}, 1}, {{2011, 3, 16}, 2}, {{2011, 3, 17}, 3}}
这可能是可取的,也可能不是可取的,但这取决于更了解他的问题的radhat。