# Issubset() but order matters

**URL:** <https://discourse.julialang.org/t/issubset-but-order-matters/73636>\
**Category:** General Usage\
**Tags:** question, arrays\
**Created:** [December 26, 2021, 4:21am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636 "2021-12-26T04:21:39Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Renan\_Rabelo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/renan_rabelo/32/8048_2.png) [@Renan\_Rabelo](https://discourse.julialang.org/u/Renan_Rabelo)\
**Post date:** [December 26, 2021, 4:21am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/1 "2021-12-26T04:21:39Z")

</div>

Is there a function that returns true or false whenever one vector is a subvector from another? issubset() does not implies order.

Thanks!

---

<div class="post-metadata">

**Author:** ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)\
**Post date:** [December 26, 2021, 5:42am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/2 "2021-12-26T05:42:59Z")

</div>

I don’t believe so, but you could roll your own pretty easily.

---

<div class="post-metadata">

**Author:** ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)\
**Post date:** [December 26, 2021, 5:50am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/3 "2021-12-26T05:50:48Z")

</div>

`setdiff()` is order-sensitive so you can probably use it in combination with `isempty`?

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [December 26, 2021, 8:59am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/4 "2021-12-26T08:59:28Z")

</div>

One proposal:

```julia
function issubvec(sv, v)
    ix = Int64[]
    for s in sv
        i = findfirst(==(s), v)
        isnothing(i) && return false
        push!(ix, i)
    end
    return (length(ix) == length(sv)) && issorted(ix)
end

```

Examples:

```julia
sv = [7, 3, 5]
issubvec(sv, collect(1:10)) # false
issubvec(sv, [1, 7, 2, 3, 5, 4]) # true
issubvec(sv, []) # false
issubvec(sv, [3, 5, 7]) # false
issubvec([], [3, 5, 7]) # true
issubvec([], []) # true

```

---

<div class="post-metadata">

**Author:** ![bkamins](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bkamins/32/208538_2.png) [@bkamins](https://discourse.julialang.org/u/bkamins)\
**Post date:** [December 26, 2021, 9:10am UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/5 "2021-12-26T09:10:33Z")

</div>

A non-allocating (and a bit faster) version would be:

```julia
function issubvec(sv::AbstractVector, v::AbstractVector)
    i = firstindex(v)
    for s in sv
        i = findnext(==(s), v, i)
        isnothing(i) && return false
        i += 1
    end
    return true
end

```

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [December 26, 2021, 2:30pm UTC](https://discourse.julialang.org/t/issubset-but-order-matters/73636/6 "2021-12-26T14:30:53Z")

</div>

After all the fat of the Christmas holidays, this pretty lean code by @bkamins is quite healthy.
