How about a function called contains() for the module std.array?
Les De Ridder
les at lesderid.net
Sun Oct 20 02:46:24 UTC 2019
On Saturday, 19 October 2019 at 21:47:57 UTC, Murilo wrote:
> I needed a function that tells if an array contains the
> elements of another, as in `[1, 2, 3, 4, 5, 6].contains([6,
> 4])` by returning a `bool`. I did not find such function so I
> made my own version but I'm unable to submit a PR on GitHub
> since I don't know how to write a function using that style
> that I saw on GitHub. I imagine that maybe you guys could take
> my function and refactor it so it will be according to your
> rules and then add it to std.array. What do you think?
> Here is my function:
> //This function returns a bool telling if an array totally
> contains the elements of a smaller array
> import std.algorithm.searching : countUntil;
> import std.algorithm.sorting : sort;
>
> bool contains(long[] a, long[] b)
> {
> //first we sort both of them
> sort(a);
> sort(b);
> //now we check them using slices and return the result
> return b == a[a.countUntil(b[0]) .. a.countUntil(b[$ - 1])
> + 1];
> }
> /*
> Example:
> long[] a = [3, 9, 1, 4, 7, 6, 5, 8, 2];
> long[] b = [5, 4, 6];
> writeln(contains(a, b));
> */
You could do something like this:
import std.stdio;
import std.algorithm : all, canFind;
auto a = [1, 2, 3, 4, 5, 6];
auto f = [3, 5, 6].all!(n => a.canFind(n));
writeln(f);
PS: this should probably have been posted to the Learn list.
More information about the Digitalmars-d
mailing list