note
hding
<p>In either Smalltalk or Common Lisp I'd probably just use the built in intersection facilities. (Respectively):</p>
<p><code>
a intersecton: b.
(intersection a b)</code></p>
<p>Of course the efficiency would depend on how these things are implemented. For the Smalltalk I use (Dolphin) it seems that it just iterates over the elements of a and b. One could coerce one of the collections to a Set first, hoping that the inclusion test would be better (which seems to be the case in Dolphin, which implements Set via a hash.</p>
<p><code>
c := b asSet.
a select: [:element | b includes: element].
</code></p>
<p>Similarly for Lisp, if the built-in didn't seem to do the job fast enough, I'd be tempted either to use a hash or sort the lists and walk them (as others have suggested). It may well be that the built-in already uses one of these techniques though, so it's hard to say whether to expect an improvement</p>
162711
162711