diff --git a/src/PeriodicTable.jl b/src/PeriodicTable.jl index a51a369..4fb9a32 100644 --- a/src/PeriodicTable.jl +++ b/src/PeriodicTable.jl @@ -10,6 +10,7 @@ e.g. `elements[:O]`. """ module PeriodicTable export Element, elements +export getlist import Unitful: u, g, cm, K, J, mol, Quantity @@ -166,6 +167,12 @@ Base.get(e::Elements, i::Integer, default) = get(e.bynumber, i, default) Base.get(e::Elements, i::AbstractString, default) = get(e.byname, lowercase(i), default) Base.get(e::Elements, i::Symbol, default) = get(e.bysymbol, i, default) +# Utility functions +getlist(e::Elements, i::Symbol) = getfield.(e,i) +getlist(e::Elements, i::AbstractString) = getfield.(e,Symbol(i)) +getlist(e::Vector{Element}, i) = getlist(Elements(e),i) + + # support iterating over elements Base.eltype(e::Elements) = Element Base.length(e::Elements) = length(e.data) diff --git a/test/runtests.jl b/test/runtests.jl index f56173a..6caf1fc 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -81,3 +81,9 @@ for z in eachindex(elements) @test haskey(elmdict, elements[z]) @test elmdict[elements[z]] == z end + +# Test utility function +@test length(getlist(elements,:symbol)) == length(elements) +@test getlist(elements[1:2],:name) == ["Hydrogen","Helium"] +@test getlist(elements[3:4],"symbol") == ["Li","Be"] +@test getlist(elements[[6,74]],:density) == [1.821u"g*cm^-3",19.25u"g*cm^-3"]