Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow 2-arg splice! on arbitrary index iterables #34524

Merged
merged 1 commit into from
Feb 26, 2020
Merged

Conversation

Keno
Copy link
Member

@Keno Keno commented Jan 26, 2020

We have deleteat!(vec::Vector, itr), but it returns the modified vector.
If you instead want to obtain the deleted elements, there is
splice!(::Vector, ::UnitRange) as a special case of the three-argument
version that inserts additional elements where the old ones were
deleted. However, these is no two argument splice! for arbitrary
iterables, so probably the best way to write that currently is:

inds = collect(itr)
vals = A[inds]
deleteat!(A, inds)
vals

which is both less efficient and more verbose than ideal. I'm wondering
if perhaps deleteat! should have been returning the deleted elements,
but that's not a change we can make in 1.x. Instead, I'm proposing
here to extend the 2 argument (but not the 3 argument for obvious reasons)
variant of splice! to arbitrary iterables.

We have deleteat!(vec::Vector, itr), but it returns the modified vector.
If you instead want to obtain the delted elements, there is
splice!(::Vector, ::UnitRange) as a special case of the three-argument
version that inserts additional elements where the old ones were
deleted. However, these is no two argument splice! for arbitrary
iterables, so probably the best way to write that currently is:

```
inds = collect(itr)
vals = A[inds]
deleteat!(A, inds)
vals
```

which is both less efficient and more verbose than ideal. I'm wondering
if perhaps deleteat! should have been returning the deleted elements,
but that's not a change we can make in 1.x. Instead, I'm proposing
here to extend the 2 argument (but not the 3 argument for obvious reasons)
variant of splice! to arbitrary iterables.
@JeffBezanson JeffBezanson added arrays [a, r, r, a, y, s] collections Data structures holding multiple items, e.g. sets labels Jan 28, 2020
@Keno Keno merged commit c2cd601 into master Feb 26, 2020
@Keno Keno deleted the kf/2argsplicearray branch February 26, 2020 20:41
ravibitsgoa pushed a commit to ravibitsgoa/julia that referenced this pull request Apr 9, 2020
We have deleteat!(vec::Vector, itr), but it returns the modified vector.
If you instead want to obtain the delted elements, there is
splice!(::Vector, ::UnitRange) as a special case of the three-argument
version that inserts additional elements where the old ones were
deleted. However, these is no two argument splice! for arbitrary
iterables, so probably the best way to write that currently is:

```
inds = collect(itr)
vals = A[inds]
deleteat!(A, inds)
vals
```

which is both less efficient and more verbose than ideal. I'm wondering
if perhaps deleteat! should have been returning the deleted elements,
but that's not a change we can make in 1.x. Instead, I'm proposing
here to extend the 2 argument (but not the 3 argument for obvious reasons)
variant of splice! to arbitrary iterables.
ravibitsgoa pushed a commit to ravibitsgoa/julia that referenced this pull request Apr 9, 2020
KristofferC pushed a commit that referenced this pull request Apr 11, 2020
We have deleteat!(vec::Vector, itr), but it returns the modified vector.
If you instead want to obtain the delted elements, there is
splice!(::Vector, ::UnitRange) as a special case of the three-argument
version that inserts additional elements where the old ones were
deleted. However, these is no two argument splice! for arbitrary
iterables, so probably the best way to write that currently is:

```
inds = collect(itr)
vals = A[inds]
deleteat!(A, inds)
vals
```

which is both less efficient and more verbose than ideal. I'm wondering
if perhaps deleteat! should have been returning the deleted elements,
but that's not a change we can make in 1.x. Instead, I'm proposing
here to extend the 2 argument (but not the 3 argument for obvious reasons)
variant of splice! to arbitrary iterables.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arrays [a, r, r, a, y, s] collections Data structures holding multiple items, e.g. sets
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants