Skip to content

Commit dcd8cad

Browse files
add delete for NamedTuple (#55270)
from #27725 Co-authored-by: Jeffrey Sarnoff <[email protected]>
1 parent 5a904ac commit dcd8cad

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

base/namedtuple.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,24 @@ function diff_fallback(a::NamedTuple, an::Tuple{Vararg{Symbol}}, bn::Tuple{Varar
424424
_new_NamedTuple(NamedTuple{names, types}, (A...,))
425425
end
426426

427+
"""
428+
delete(a::NamedTuple, field::Symbol)
429+
430+
Construct a new named tuple from `a` by removing the named field.
431+
432+
```jldoctest
433+
julia> Base.delete((a=1, b=2, c=3), :a)
434+
(b = 2, c = 3)
435+
436+
julia> Base.delete((a=1, b=2, c=3), :b)
437+
(a = 1, c = 3)
438+
```
439+
"""
440+
@constprop :aggressive function delete(a::NamedTuple{an}, field::Symbol) where {an}
441+
names = diff_names(an, (field,))
442+
NamedTuple{names}(a)
443+
end
444+
427445
"""
428446
structdiff(a::NamedTuple, b::Union{NamedTuple,Type{NamedTuple}})
429447

test/namedtuple.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# This file is a part of Julia. License is MIT: https://julialang.org/license
22

3+
using Base: delete
4+
35
@test_throws TypeError NamedTuple{1,Tuple{}}
46
@test_throws TypeError NamedTuple{(),1}
57
@test_throws TypeError NamedTuple{(:a,1),Tuple{Int}}
@@ -282,6 +284,11 @@ end
282284
abstr_nt_22194_3()
283285
@test Base.return_types(abstr_nt_22194_3, ()) == Any[Any]
284286

287+
@test delete((a=1,), :a) == NamedTuple()
288+
@test delete((a=1, b=2), :a) == (b=2,)
289+
@test delete((a=1, b=2, c=3), :b) == (a=1, c=3)
290+
@test delete((a=1, b=2, c=3), :z) == (a=1, b=2, c=3)
291+
285292
@test Base.structdiff((a=1, b=2), (b=3,)) == (a=1,)
286293
@test Base.structdiff((a=1, b=2, z=20), (b=3,)) == (a=1, z=20)
287294
@test Base.structdiff((a=1, b=2, z=20), (b=3, q=20, z=1)) == (a=1,)

0 commit comments

Comments
 (0)