Collections and Data Structures
Iteration
순차 반복은 iterate
함수에 의해 구현됩니다. 일반적인 for
루프:
for i in iter # or "for i = iter"
# body
end
is translated into:
next = iterate(iter)
while next !== nothing
(i, state) = next
# body
next = iterate(iter, state)
end
state
객체는 무엇이든 될 수 있으며, 각 반복 가능한 유형에 적합하게 선택해야 합니다. 사용자 정의 반복 가능한 유형을 정의하는 방법에 대한 자세한 내용은 manual section on the iteration interface을 참조하세요.
Base.iterate
— Functioniterate(iter [, state]) -> Union{Nothing, Tuple{Any, Any}}
이터레이터를 진행하여 다음 요소를 얻습니다. 남은 요소가 없으면 nothing
이 반환되어야 합니다. 그렇지 않으면 다음 요소와 새로운 반복 상태의 2-튜플이 반환되어야 합니다.
Base.IteratorSize
— TypeIteratorSize(itertype::Type) -> IteratorSize
주어진 반복자의 유형에 따라 다음 값 중 하나를 반환합니다:
SizeUnknown()
- 길이(요소 수)를 미리 결정할 수 없는 경우.HasLength()
- 고정된 유한 길이가 있는 경우.HasShape{N}()
- 알려진 길이와 다차원 형태(배열과 같은 개념)가 있는 경우. 이 경우N
은 차원의 수를 나타내며,axes
함수는 반복자에 대해 유효합니다.IsInfinite()
- 반복자가 값을 무한히 생성하는 경우.
기본값(이 함수를 정의하지 않는 반복자에 대한)은 HasLength()
입니다. 이는 대부분의 반복자가 length
를 구현한다고 가정함을 의미합니다.
이 특성은 일반적으로 결과를 위해 공간을 미리 할당하는 알고리즘과 결과를 점진적으로 크기를 조정하는 알고리즘 간의 선택에 사용됩니다.
julia> Base.IteratorSize(1:5)
Base.HasShape{1}()
julia> Base.IteratorSize((2,3))
Base.HasLength()
Base.IteratorEltype
— TypeIteratorEltype(itertype::Type) -> IteratorEltype
주어진 반복자의 유형에 따라 다음 값 중 하나를 반환합니다:
EltypeUnknown()
- 반복자가 생성하는 요소의 유형이 미리 알려져 있지 않은 경우.HasEltype()
- 요소 유형이 알려져 있으며,eltype
가 의미 있는 값을 반환할 경우.
HasEltype()
는 기본값이며, 반복자는 eltype
를 구현하는 것으로 가정됩니다.
이 특성은 일반적으로 특정 유형의 결과를 미리 할당하는 알고리즘과 생성된 값의 유형에 따라 결과 유형을 선택하는 알고리즘 간의 선택에 사용됩니다.
julia> Base.IteratorEltype(1:5)
Base.HasEltype()
완전히 구현됨:
AbstractRange
UnitRange
Tuple
Number
AbstractArray
BitSet
IdDict
Dict
WeakKeyDict
각줄
AbstractString
Set
Pair
NamedTuple
Constructors and Types
Base.AbstractRange
— TypeAbstractRange{T} <: AbstractVector{T}
타입 T
의 요소를 가진 선형 범위에 대한 슈퍼타입입니다. UnitRange
, LinRange
및 기타 유형은 이의 서브타입입니다.
모든 서브타입은 step
를 정의해야 합니다. 따라서 LogRange
는 AbstractRange
의 서브타입이 아닙니다.
Base.OrdinalRange
— TypeOrdinalRange{T, S} <: AbstractRange{T}
유형 T
의 요소와 유형 S
의 간격을 가진 서수 범위의 슈퍼타입입니다. 단계는 항상 oneunit
의 정확한 배수여야 하며, T
는 oneunit
보다 작은 값을 가질 수 없는 "불연속" 유형이어야 합니다. 예를 들어, Integer
또는 Date
유형은 적합하지만, Float64
는 적합하지 않습니다(이 유형은 oneunit(Float64)
보다 작은 값을 나타낼 수 있기 때문입니다). UnitRange
, StepRange
및 기타 유형은 이의 하위 유형입니다.
Base.AbstractUnitRange
— TypeAbstractUnitRange{T} <: OrdinalRange{T, T}
단위 크기 oneunit(T)
로 요소가 타입 T
인 범위의 슈퍼타입입니다. UnitRange
및 기타 유형은 이의 서브타입입니다.
Base.StepRange
— TypeStepRange{T, S} <: OrdinalRange{T, S}
타입 T
의 요소와 타입 S
의 간격을 가진 범위입니다. 각 요소 간의 단계는 일정하며, 범위는 타입 T
의 start
와 stop
, 그리고 타입 S
의 step
으로 정의됩니다. T
와 S
는 모두 부동 소수점 타입이 아니어야 합니다. a:b:c
구문은 b != 0
이고 a
, b
, c
가 모두 정수일 때 StepRange
를 생성합니다.
예제
julia> collect(StepRange(1, Int8(2), 10))
5-element Vector{Int64}:
1
3
5
7
9
julia> typeof(StepRange(1, Int8(2), 10))
StepRange{Int64, Int8}
julia> typeof(1:3:6)
StepRange{Int64, Int64}
Base.UnitRange
— TypeUnitRange{T<:Real}
start
와 stop
의 타입 T
로 매개변수화된 범위로, start
에서 시작하여 stop
을 초과할 때까지 1
간격으로 요소로 채워집니다. a:b
구문에서 a
와 b
가 모두 Integer
인 경우 UnitRange
가 생성됩니다.
예제
julia> collect(UnitRange(2.3, 5.2))
3-element Vector{Float64}:
2.3
3.3
4.3
julia> typeof(1:10)
UnitRange{Int64}
Base.LinRange
— TypeLinRange{T,L}
start
와 stop
사이에 len
개의 선형으로 간격이 있는 요소를 가진 범위입니다. 간격의 크기는 len
에 의해 제어되며, 이는 Integer
여야 합니다.
예제
julia> LinRange(1.5, 5.5, 9)
9-element LinRange{Float64, Int64}:
1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5
range
를 사용하는 것과 비교할 때, LinRange
를 직접 구성하는 것이 오버헤드가 적지만 부동 소수점 오류를 수정하려고 하지는 않습니다:
julia> collect(range(-0.1, 0.3, length=5))
5-element Vector{Float64}:
-0.1
0.0
0.1
0.2
0.3
julia> collect(LinRange(-0.1, 0.3, 5))
5-element Vector{Float64}:
-0.1
-1.3877787807814457e-17
0.09999999999999999
0.19999999999999998
0.3
로그arithmically 간격이 있는 점에 대해서는 Logrange
도 참조하세요.
General Collections
Base.isempty
— Functionisempty(collection) -> Bool
컬렉션이 비어 있는지(요소가 없는지) 확인합니다.
!!! 경고 isempty(itr)
는 적절한 Base.isdone(itr)
메서드가 정의되지 않은 경우 상태가 있는 반복자 itr
의 다음 요소를 소비할 수 있습니다. 상태가 있는 반복자는 isdone을 구현해야 하지만, 모든 반복자 유형을 지원해야 하는 일반 코드를 작성할 때 isempty
사용을 피하고 싶을 수 있습니다.
예제
julia> isempty([])
true
julia> isempty([1 2 3])
false
isempty(condition)
조건에 대기 중인 작업이 없으면 true
를 반환하고, 그렇지 않으면 false
를 반환합니다.
Base.isdone
— Functionisdone(itr, [state]) -> Union{Bool, Missing}
이 함수는 반복자 완료에 대한 빠른 경로 힌트를 제공합니다. 이는 사용자가 노출되지 않을 요소가 소비되는 것을 피하고자 하는 상태 기반 반복자에 유용합니다(예: isempty
또는 zip
에서 완료 여부를 확인할 때).
이 기능을 선택하고자 하는 상태 기반 반복자는 반복자가 완료되었는지 여부에 따라 true/false를 반환하는 isdone
메서드를 정의해야 합니다. 상태가 없는 반복자는 이 함수를 구현할 필요가 없습니다.
결과가 missing
인 경우, 호출자는 iterate(x, state) === nothing
을 계산하여 확정적인 답을 구할 수 있습니다.
Base.empty!
— Functionempty!(collection) -> collection
collection
의 모든 요소를 제거합니다.
예제
julia> A = Dict("a" => 1, "b" => 2)
Dict{String, Int64} with 2 entries:
"b" => 2
"a" => 1
julia> empty!(A);
julia> A
Dict{String, Int64}()
empty!(c::Channel)
채널 c
를 내부 버퍼에서 empty!
를 호출하여 비웁니다. 비어 있는 채널을 반환합니다.
Base.length
— Functionlength(collection) -> Integer
컬렉션의 요소 수를 반환합니다.
인덱스 가능한 컬렉션의 마지막 유효 인덱스를 얻으려면 lastindex
를 사용하세요.
예제
julia> length(1:5)
5
julia> length([1, 2, 3, 4])
4
julia> length([1 2; 3 4])
4
Base.checked_length
— FunctionBase.checked_length(r)
length(r)
를 계산하지만, 결과가 Union{Integer(eltype(r)),Int}
에 맞지 않을 경우 오버플로우 오류를 확인할 수 있습니다.
완전히 구현됨:
AbstractRange
UnitRange
Tuple
Number
AbstractArray
BitSet
IdDict
Dict
WeakKeyDict
AbstractString
Set
NamedTuple
Iterable Collections
Base.in
— Functionin(item, collection) -> Bool
∈(item, collection) -> Bool
주어진 컬렉션에 항목이 있는지 확인합니다. 이는 항목이 컬렉션을 반복하여 생성된 값 중 하나와 ==
같다는 의미입니다. Bool
값을 반환하지만, item
이 missing
이거나 collection
에 missing
이 포함되어 있지만 item
은 포함되지 않은 경우에는 missing
이 반환됩니다 (삼값 논리, any
및 ==
와 일치하는 동작).
일부 컬렉션은 약간 다른 정의를 따릅니다. 예를 들어, Set
는 항목이 요소 중 하나와 isequal
같은지 확인하고, Dict
는 key=>value
쌍을 찾으며, key
는 isequal
로 비교됩니다.
사전에서 키의 존재를 확인하려면 haskey
또는 k in keys(dict)
를 사용하십시오. 위에서 언급한 컬렉션의 경우 결과는 항상 Bool
입니다.
in.(items, collection)
또는 items .∈ collection
으로 브로드캐스팅할 때, item
과 collection
모두 브로드캐스트되므로 종종 의도한 바가 아닐 수 있습니다. 예를 들어, 두 인수가 벡터이고(차원이 일치하는 경우) 결과는 컬렉션 items
의 각 값이 collection
의 해당 위치에 있는 값에 in
인지 여부를 나타내는 벡터입니다. items
의 각 값이 collection
에 있는지 여부를 나타내는 벡터를 얻으려면 collection
을 튜플이나 Ref
로 감싸십시오. 예: in.(items, Ref(collection))
또는 items .∈ Ref(collection)
.
또한 참조: ∉
, insorted
, contains
, occursin
, issubset
.
예제
julia> a = 1:3:20
1:3:19
julia> 4 in a
true
julia> 5 in a
false
julia> missing in [1, 2]
missing
julia> 1 in [2, missing]
missing
julia> 1 in [1, missing]
true
julia> missing in Set([1, 2])
false
julia> (1=>missing) in Dict(1=>10, 2=>20)
missing
julia> [1, 2] .∈ [2, 3]
2-element BitVector:
0
0
julia> [1, 2] .∈ ([2, 3],)
2-element BitVector:
0
1
Base.:∉
— Function∉(item, collection) -> Bool
∌(collection, item) -> Bool
∈
와 ∋
의 부정, 즉 item
이 collection
에 없음을 확인합니다.
items .∉ collection
으로 브로드캐스팅할 때, item
과 collection
모두 브로드캐스트되므로, 이는 종종 의도한 바가 아닙니다. 예를 들어, 두 인수가 벡터이고(차원이 일치하는 경우) 결과는 collection
의 해당 위치에 있는 값이 아닌 items
의 각 값이 아닌지를 나타내는 벡터입니다. items
의 각 값이 collection
에 없음을 나타내는 벡터를 얻으려면, collection
을 튜플이나 Ref
로 감싸야 합니다. 예: items .∉ Ref(collection)
.
예제
julia> 1 ∉ 2:4
true
julia> 1 ∉ 1:3
false
julia> [1, 2] .∉ [2, 3]
2-element BitVector:
1
1
julia> [1, 2] .∉ ([2, 3],)
2-element BitVector:
1
0
Base.hasfastin
— FunctionBase.hasfastin(T)
collection::T
에서 x ∈ collection
계산이 "빠른" 작업(일반적으로 상수 또는 로그 복잡도)으로 간주될 수 있는지 여부를 결정합니다. 편의를 위해 hasfastin(x) = hasfastin(typeof(x))
가 제공되므로 인스턴스를 타입 대신 전달할 수 있습니다. 그러나 타입 인수를 수용하는 형태는 새로운 타입에 대해 정의되어야 합니다.
hasfastin(T)
의 기본값은 AbstractSet
, AbstractDict
및 AbstractRange
의 하위 타입에 대해 true
이며, 그렇지 않은 경우 false
입니다.
Base.eltype
— Functioneltype(type)
주어진 type
의 컬렉션을 반복하여 생성된 요소의 유형을 결정합니다. 사전 유형의 경우, 이는 Pair{KeyType,ValType}
이 됩니다. 인스턴스를 유형 대신 전달할 수 있도록 편의를 위해 eltype(x) = eltype(typeof(x))
가 제공됩니다. 그러나 유형 인수를 수용하는 형식은 새 유형에 대해 정의되어야 합니다.
예제
julia> eltype(fill(1f0, (2,2)))
Float32
julia> eltype(fill(0x1, (2,2)))
UInt8
Base.indexin
— Functionindexin(a, b)
b
의 각 값에 대해 a
의 첫 번째 인덱스를 포함하는 배열을 반환합니다. 출력 배열은 a
가 b
의 구성원이 아닐 경우 nothing
을 포함합니다.
예제
julia> a = ['a', 'b', 'c', 'b', 'd', 'a'];
julia> b = ['a', 'b', 'c'];
julia> indexin(a, b)
6-element Vector{Union{Nothing, Int64}}:
1
2
3
2
nothing
1
julia> indexin(b, a)
3-element Vector{Union{Nothing, Int64}}:
1
2
3
Base.unique
— Functionunique(itr)
컬렉션 itr
의 고유한 요소만 포함하는 배열을 반환합니다. 이는 isequal
및 hash
에 의해 결정되며, 동등한 요소 집합의 첫 번째 요소가 원래 나타나는 순서로 정렬됩니다. 입력의 요소 유형은 유지됩니다.
참고: unique!
, allunique
, allequal
.
예제
julia> unique([1, 2, 6, 2])
3-element Vector{Int64}:
1
2
6
julia> unique(Real[1, 1.0, 2])
2-element Vector{Real}:
1
2
unique(f, itr)
itr
의 요소에 적용된 f
에 의해 생성된 각 고유 값에 대해 itr
에서 하나의 값을 포함하는 배열을 반환합니다.
예제
julia> unique(x -> x^2, [1, -1, 3, -3, 4])
3-element Vector{Int64}:
1
3
4
이 기능은 배열에서 고유 요소의 첫 번째 발생의 인덱스를 추출하는 데에도 사용할 수 있습니다:
julia> a = [3.1, 4.2, 5.3, 3.1, 3.1, 3.1, 4.2, 1.7];
julia> i = unique(i -> a[i], eachindex(a))
4-element Vector{Int64}:
1
2
3
8
julia> a[i]
4-element Vector{Float64}:
3.1
4.2
5.3
1.7
julia> a[i] == unique(a)
true
unique(A::AbstractArray; dims::Int)
차원 dims
을 따라 A
의 고유한 영역을 반환합니다.
예제
julia> A = map(isodd, reshape(Vector(1:8), (2,2,2)))
2×2×2 Array{Bool, 3}:
[:, :, 1] =
1 1
0 0
[:, :, 2] =
1 1
0 0
julia> unique(A)
2-element Vector{Bool}:
1
0
julia> unique(A, dims=2)
2×1×2 Array{Bool, 3}:
[:, :, 1] =
1
0
[:, :, 2] =
1
0
julia> unique(A, dims=3)
2×2×1 Array{Bool, 3}:
[:, :, 1] =
1 1
0 0
Base.unique!
— Functionunique!(f, A::AbstractVector)
A
의 요소에 적용된 f
에 의해 생성된 각 고유 값에 대해 A
에서 하나의 값을 선택한 다음 수정된 A
를 반환합니다.
이 메서드는 Julia 1.1부터 사용할 수 있습니다.
예제
julia> unique!(x -> x^2, [1, -1, 3, -3, 4])
3-element Vector{Int64}:
1
3
4
julia> unique!(n -> n%3, [5, 1, 8, 9, 3, 4, 10, 7, 2, 6])
3-element Vector{Int64}:
5
1
9
julia> unique!(iseven, [2, 3, 5, 7, 9])
2-element Vector{Int64}:
2
3
unique!(A::AbstractVector)
isequal
와 hash
에 의해 결정된 중복 항목을 제거한 후 수정된 A
를 반환합니다. unique!
는 A
의 요소를 발생하는 순서대로 반환합니다. 반환된 데이터의 순서에 신경 쓰지 않는 경우, (sort!(A); unique!(A))
를 호출하는 것이 훨씬 더 효율적이며, A
의 요소가 정렬될 수 있는 한 그렇습니다.
예제
julia> unique!([1, 1, 1])
1-element Vector{Int64}:
1
julia> A = [7, 3, 2, 3, 7, 5];
julia> unique!(A)
4-element Vector{Int64}:
7
3
2
5
julia> B = [7, 6, 42, 6, 7, 42];
julia> sort!(B); # unique!는 정렬된 데이터를 훨씬 더 효율적으로 처리할 수 있습니다.
julia> unique!(B)
3-element Vector{Int64}:
6
7
42
Base.allunique
— Functionallunique(itr) -> Bool
allunique(f, itr) -> Bool
itr
의 모든 값이 isequal
로 비교했을 때 서로 다르면 true
를 반환합니다. 두 번째 방법의 경우 [f(x) for x in itr]
의 모든 값이 서로 다르면 true
를 반환합니다.
allunique(f, itr)
는 f
를 length(itr)
보다 적은 횟수만큼 호출할 수 있습니다. 호출 횟수는 구현 세부사항으로 간주됩니다.
allunique
는 입력이 정렬되어 있을 때 특수화된 구현을 사용할 수 있습니다.
참고: unique
, issorted
, allequal
.
allunique(f, itr)
메서드는 최소한 Julia 1.11이 필요합니다.
예제
julia> allunique([1, 2, 3])
true
julia> allunique([1, 2, 1, 2])
false
julia> allunique(Real[1, 1.0, 2])
false
julia> allunique([NaN, 2.0, NaN, 4.0])
false
julia> allunique(abs, [1, -1, 2])
false
Base.allequal
— Functionallequal(itr) -> Bool
allequal(f, itr) -> Bool
itr
의 모든 값이 isequal
로 비교했을 때 같으면 true
를 반환합니다. 두 번째 방법의 경우 [f(x) for x in itr]
의 모든 값이 같으면 true
를 반환합니다.
allequal(f, itr)
는 length(itr)
보다 적은 횟수로 f
를 호출할 수 있습니다. 호출 횟수는 구현 세부사항으로 간주됩니다.
allequal
함수는 최소한 Julia 1.8이 필요합니다.
메서드 allequal(f, itr)
는 최소한 Julia 1.11이 필요합니다.
예제
julia> allequal([])
true
julia> allequal([1])
true
julia> allequal([1, 1])
true
julia> allequal([1, 2])
false
julia> allequal(Dict(:a => 1, :b => 1))
false
julia> allequal(abs2, [1, -1])
true
Base.reduce
— Methodreduce(op, itr; [init])
주어진 이진 연산자 op
로 주어진 컬렉션 itr
을 축소합니다. 제공된 경우, 초기 값 init
은 op
의 중립 요소여야 하며, 이는 빈 컬렉션에 대해 반환됩니다. init
이 비어 있지 않은 컬렉션에 사용되는지는 명시되어 있지 않습니다.
빈 컬렉션의 경우, init
을 제공하는 것이 필요하지만, op
가 +
, *
, max
, min
, &
, |
중 하나인 특별한 경우에는 Julia가 op
의 중립 요소를 결정할 수 있습니다.
일부 일반적으로 사용되는 연산자에 대한 축소는 특별한 구현을 가질 수 있으며, 대신 사용해야 합니다: maximum
(itr)
, minimum
(itr)
, sum
(itr)
, prod
(itr)
, any
(itr)
, all
(itr)
. 특정 배열의 배열을 연결하는 효율적인 방법은 reduce(
vcat
, arr)
또는 reduce(
hcat
, arr)
을 호출하는 것입니다.
축소의 결합성은 구현에 따라 다릅니다. 이는 -
와 같은 비결합 연산을 사용할 수 없음을 의미합니다. 왜냐하면 reduce(-,[1,2,3])
가 (1-2)-3
또는 1-(2-3)
으로 평가되어야 하는지 정의되지 않기 때문입니다. 보장된 왼쪽 또는 오른쪽 결합성을 위해 대신 foldl
또는 foldr
를 사용하십시오.
일부 연산은 오류를 누적합니다. 축소가 그룹으로 실행될 수 있다면 병렬성이 더 쉬워질 것입니다. Julia의 향후 버전에서는 알고리즘이 변경될 수 있습니다. 정렬된 컬렉션을 사용하는 경우 요소의 순서는 재배열되지 않습니다.
예제
julia> reduce(*, [2; 3; 4])
24
julia> reduce(*, [2; 3; 4]; init=-1)
-24
Base.reduce
— Methodreduce(f, A::AbstractArray; dims=:, [init])
2-인수 함수 f
를 A
의 차원에 따라 축소합니다. dims
는 축소할 차원을 지정하는 벡터이며, 키워드 인수 init
은 축소에 사용할 초기 값입니다. +
, *
, max
및 min
의 경우 init
인수는 선택 사항입니다.
축소의 결합성은 구현에 따라 다릅니다. 특정 결합성이 필요한 경우, 예를 들어 왼쪽에서 오른쪽으로, 자체 루프를 작성하거나 foldl
또는 foldr
사용을 고려해야 합니다. reduce
에 대한 문서를 참조하십시오.
예제
julia> a = reshape(Vector(1:16), (4,4))
4×4 Matrix{Int64}:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
julia> reduce(max, a, dims=2)
4×1 Matrix{Int64}:
13
14
15
16
julia> reduce(max, a, dims=1)
1×4 Matrix{Int64}:
4 8 12 16
Base.foldl
— Methodfoldl(op, itr; [init])
reduce
와 유사하지만 왼쪽 결합성이 보장됩니다. 제공된 경우, 키워드 인수 init
은 정확히 한 번 사용됩니다. 일반적으로 빈 컬렉션과 작업하기 위해 init
을 제공해야 합니다.
또한 mapfoldl
, foldr
, accumulate
를 참조하세요.
예제
julia> foldl(=>, 1:4)
((1 => 2) => 3) => 4
julia> foldl(=>, 1:4; init=0)
(((0 => 1) => 2) => 3) => 4
julia> accumulate(=>, (1,2,3,4))
(1, 1 => 2, (1 => 2) => 3, ((1 => 2) => 3) => 4)
Base.foldr
— Methodfoldr(op, itr; [init])
reduce
와 유사하지만 오른쪽 결합성이 보장됩니다. 제공된 경우, 키워드 인수 init
은 정확히 한 번 사용됩니다. 일반적으로 빈 컬렉션과 작업하기 위해 init
을 제공해야 합니다.
예제
julia> foldr(=>, 1:4)
1 => (2 => (3 => 4))
julia> foldr(=>, 1:4; init=0)
1 => (2 => (3 => (4 => 0)))
Base.maximum
— Functionmaximum(f, itr; [init])
함수 f
를 itr
의 각 요소에 호출한 결과 중 가장 큰 값을 반환합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. init
은 max
에 대한 중립 요소여야 하며(즉, 다른 어떤 요소보다 작거나 같아야 함) init
이 비어 있지 않은 컬렉션에 사용되는지는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> maximum(length, ["Julion", "Julia", "Jule"])
6
julia> maximum(length, []; init=-1)
-1
julia> maximum(sin, Real[]; init=-1.0) # 좋음, sin의 출력이 >= -1이므로
-1.0
maximum(itr; [init])
컬렉션에서 가장 큰 요소를 반환합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. init
은 max
에 대한 중립 요소여야 하며(즉, 다른 모든 요소보다 작거나 같아야 함) 빈 컬렉션에 대해 init
이 사용되는지는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> maximum(-20.5:10)
9.5
julia> maximum([1,2,3])
3
julia> maximum(())
ERROR: ArgumentError: reducing over an empty collection is not allowed; consider supplying `init` to the reducer
Stacktrace:
[...]
julia> maximum((); init=-Inf)
-Inf
maximum(A::AbstractArray; dims)
주어진 차원에서 배열의 최대값을 계산합니다. 두 개 이상의 인수의 최대값을 취하는 max(a,b)
함수도 참조하십시오. 이 함수는 max.(a,b)
를 통해 배열에 요소별로 적용할 수 있습니다.
또한 다음을 참조하십시오: maximum!
, extrema
, findmax
, argmax
.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> maximum(A, dims=1)
1×2 Matrix{Int64}:
3 4
julia> maximum(A, dims=2)
2×1 Matrix{Int64}:
2
4
maximum(f, A::AbstractArray; dims)
주어진 차원에서 배열의 각 요소에 대해 함수 f
를 호출하여 최대값을 계산합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> maximum(abs2, A, dims=1)
1×2 Matrix{Int64}:
9 16
julia> maximum(abs2, A, dims=2)
2×1 Matrix{Int64}:
4
16
Base.maximum!
— Functionmaximum!(r, A)
A
의 단일 차원에서 최대 값을 계산하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 될 수 있습니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> maximum!([1; 1], A)
2-element Vector{Int64}:
2
4
julia> maximum!([1 1], A)
1×2 Matrix{Int64}:
3 4
Base.minimum
— Functionminimum(f, itr; [init])
함수 f
를 itr
의 각 요소에 호출하여 가장 작은 결과를 반환합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 min
에 대한 중립 요소여야 하며(즉, 다른 모든 요소보다 크거나 같아야 함) init
이 비어 있지 않은 컬렉션에 사용되는지는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> minimum(length, ["Julion", "Julia", "Jule"])
4
julia> minimum(length, []; init=typemax(Int64))
9223372036854775807
julia> minimum(sin, Real[]; init=1.0) # 좋음, sin의 출력이 <= 1이므로
1.0
minimum(itr; [init])
컬렉션에서 가장 작은 요소를 반환합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. init
은 min
에 대한 중립 요소여야 하며(즉, 다른 모든 요소보다 크거나 같아야 함) 빈 컬렉션이 아닌 경우 init
이 사용되는지는 명시되어 있지 않습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> minimum(-20.5:10)
-20.5
julia> minimum([1,2,3])
1
julia> minimum([])
ERROR: ArgumentError: reducing over an empty collection is not allowed; consider supplying `init` to the reducer
Stacktrace:
[...]
julia> minimum([]; init=Inf)
Inf
minimum(A::AbstractArray; dims)
주어진 차원에 대해 배열의 최소값을 계산합니다. 두 개 이상의 인수 중 최소값을 취하는 min(a,b)
함수도 참조하십시오. 이 함수는 min.(a,b)
를 통해 배열에 요소별로 적용할 수 있습니다.
또한 다음을 참조하십시오: minimum!
, extrema
, findmin
, argmin
.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> minimum(A, dims=1)
1×2 Matrix{Int64}:
1 2
julia> minimum(A, dims=2)
2×1 Matrix{Int64}:
1
3
minimum(f, A::AbstractArray; dims)
주어진 차원에서 배열의 각 요소에 대해 함수 f
를 호출하여 최소값을 계산합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> minimum(abs2, A, dims=1)
1×2 Matrix{Int64}:
1 4
julia> minimum(abs2, A, dims=2)
2×1 Matrix{Int64}:
1
9
Base.minimum!
— Functionminimum!(r, A)
A
의 단일 차원에서 최소값을 계산하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 예상치 못한 동작이 발생할 수 있습니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> minimum!([1; 1], A)
2-element Vector{Int64}:
1
3
julia> minimum!([1 1], A)
1×2 Matrix{Int64}:
1 2
Base.extrema
— Functionextrema(itr; [init]) -> (mn, mx)
단일 패스에서 최소값 mn
과 최대값 mx
요소를 모두 계산하고, 이를 2-튜플로 반환합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 min
및 max
에 대한 중립 요소인 첫 번째 및 두 번째 요소를 가진 2-튜플이어야 합니다(즉, 다른 모든 요소보다 크거나 작거나 같아야 함). 결과적으로, itr
이 비어 있을 때 반환된 (mn, mx)
튜플은 mn ≥ mx
를 만족합니다. init
이 지정되면 비어 있지 않은 itr
에 대해서도 사용할 수 있습니다.
키워드 인수 init
은 Julia 1.8 이상이 필요합니다.
예제
julia> extrema(2:10)
(2, 10)
julia> extrema([9,pi,4.5])
(3.141592653589793, 9.0)
julia> extrema([]; init = (Inf, -Inf))
(Inf, -Inf)
extrema(f, itr; [init]) -> (mn, mx)
각 요소에 대해 f
를 적용하여 최소값 mn
과 최대값 mx
를 계산하고 이를 2-튜플로 반환합니다. itr
에 대해 한 번만 통과합니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 각각 min
과 max
에 대한 중립 요소인 첫 번째 및 두 번째 요소를 가진 2-튜플이어야 합니다(즉, 다른 어떤 요소보다 크거나 작거나 같아야 함). 이는 비어 있지 않은 컬렉션에 사용됩니다. 주의: 이는 빈 itr
에 대해 반환된 값 (mn, mx)
가 mn ≥ mx
를 만족함을 의미하지만, 비어 있지 않은 itr
에 대해서는 mn ≤ mx
를 만족합니다. 이는 "역설적"이지만 예상되는 결과입니다.
이 메서드는 Julia 1.2 이상이 필요합니다.
키워드 인수 init
은 Julia 1.8 이상이 필요합니다.
예제
julia> extrema(sin, 0:π)
(0.0, 0.9092974268256817)
julia> extrema(sin, Real[]; init = (1.0, -1.0)) # 좋음, -1 ≤ sin(::Real) ≤ 1
(1.0, -1.0)
extrema(A::AbstractArray; dims) -> Array{Tuple}
주어진 차원에서 배열의 최소 및 최대 요소를 계산합니다.
참고: minimum
, maximum
, extrema!
.
예제
julia> A = reshape(Vector(1:2:16), (2,2,2))
2×2×2 Array{Int64, 3}:
[:, :, 1] =
1 5
3 7
[:, :, 2] =
9 13
11 15
julia> extrema(A, dims = (1,2))
1×1×2 Array{Tuple{Int64, Int64}, 3}:
[:, :, 1] =
(1, 7)
[:, :, 2] =
(9, 15)
extrema(f, A::AbstractArray; dims) -> Array{Tuple}
주어진 차원에서 A
의 각 요소에 적용된 f
의 최소값과 최대값을 계산합니다.
이 메서드는 Julia 1.2 이상이 필요합니다.
Base.extrema!
— Functionextrema!(r, A)
r
의 단일 차원에서 A
의 최소값과 최대값을 계산하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 예상치 못한 동작이 발생할 수 있습니다.
!!! 호환성 "Julia 1.8" 이 메서드는 Julia 1.8 이상이 필요합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> extrema!([(1, 1); (1, 1)], A)
2-element Vector{Tuple{Int64, Int64}}:
(1, 2)
(3, 4)
julia> extrema!([(1, 1);; (1, 1)], A)
1×2 Matrix{Tuple{Int64, Int64}}:
(1, 3) (2, 4)
Base.argmax
— Functionargmax(r::AbstractRange)
범위는 여러 개의 최대 요소를 가질 수 있습니다. 이 경우 argmax
는 최대 인덱스를 반환하지만 반드시 첫 번째 인덱스는 아닙니다.
argmax(f, domain)
값 x
를 domain
에서 반환하여 f(x)
가 최대화됩니다. f(x)
에 대해 여러 최대값이 있는 경우 첫 번째 값이 찾아집니다.
domain
은 비어 있지 않은 반복 가능해야 합니다.
값은 isless
로 비교됩니다.
이 메서드는 Julia 1.7 이상이 필요합니다.
자세한 내용은 argmin
, findmax
를 참조하세요.
예제
julia> argmax(abs, -10:5)
-10
julia> argmax(cos, 0:π/2:2π)
0.0
argmax(itr)
컬렉션에서 최대 요소의 인덱스 또는 키를 반환합니다. 최대 요소가 여러 개일 경우, 첫 번째 요소가 반환됩니다.
컬렉션은 비어 있지 않아야 합니다.
인덱스는 keys(itr)
및 pairs(itr)
에서 반환되는 것과 동일한 유형입니다.
값은 isless
로 비교됩니다.
예제
julia> argmax([8, 0.1, -9, pi])
1
julia> argmax([1, 7, 7, 6])
2
julia> argmax([1, 7, 7, NaN])
4
argmax(A; dims) -> indices
배열 입력에 대해 주어진 차원에서 최대 요소의 인덱스를 반환합니다. NaN
은 missing
을 제외한 모든 다른 값보다 큰 것으로 간주됩니다.
예제
julia> A = [1.0 2; 3 4]
2×2 Matrix{Float64}:
1.0 2.0
3.0 4.0
julia> argmax(A, dims=1)
1×2 Matrix{CartesianIndex{2}}:
CartesianIndex(2, 1) CartesianIndex(2, 2)
julia> argmax(A, dims=2)
2×1 Matrix{CartesianIndex{2}}:
CartesianIndex(1, 2)
CartesianIndex(2, 2)
Base.argmin
— Functionargmin(r::AbstractRange)
범위는 여러 개의 최소 요소를 가질 수 있습니다. 이 경우 argmin
은 최소 인덱스를 반환하지만 반드시 첫 번째 인덱스는 아닙니다.
argmin(f, domain)
f(x)
가 최소화되는 domain
에서 값을 x
로 반환합니다. f(x)
에 대해 여러 개의 최소값이 있는 경우 첫 번째 값이 찾아집니다.
domain
은 비어 있지 않은 반복 가능해야 합니다.
NaN
은 missing
을 제외한 모든 다른 값보다 작게 처리됩니다.
이 메서드는 Julia 1.7 이상이 필요합니다.
자세한 내용은 argmax
, findmin
를 참조하세요.
예제
julia> argmin(sign, -10:5)
-10
julia> argmin(x -> -x^3 + x^2 - 10, -5:5)
5
julia> argmin(acos, 0:0.1:1)
1.0
argmin(itr)
컬렉션에서 최소 요소의 인덱스 또는 키를 반환합니다. 최소 요소가 여러 개 있는 경우 첫 번째 요소가 반환됩니다.
컬렉션은 비어 있지 않아야 합니다.
인덱스는 keys(itr)
및 pairs(itr)
에서 반환된 것과 동일한 유형입니다.
NaN
은 missing
을 제외한 모든 값보다 작게 처리됩니다.
예제
julia> argmin([8, 0.1, -9, pi])
3
julia> argmin([7, 1, 1, 6])
2
julia> argmin([7, 1, 1, NaN])
4
argmin(A; dims) -> indices
배열 입력에 대해 주어진 차원에서 최소 요소의 인덱스를 반환합니다. NaN
은 missing
을 제외한 모든 다른 값보다 작게 처리됩니다.
예제
julia> A = [1.0 2; 3 4]
2×2 Matrix{Float64}:
1.0 2.0
3.0 4.0
julia> argmin(A, dims=1)
1×2 Matrix{CartesianIndex{2}}:
CartesianIndex(1, 1) CartesianIndex(1, 2)
julia> argmin(A, dims=2)
2×1 Matrix{CartesianIndex{2}}:
CartesianIndex(1, 1)
CartesianIndex(2, 1)
Base.findmax
— Functionfindmax(f, domain) -> (f(x), index)
코도메인에서 값의 쌍(즉, f
의 출력)과 해당 값의 domain
에서의 인덱스 또는 키(즉, f
의 입력)를 반환하여 f(x)
가 최대화되도록 합니다. 최대점이 여러 개일 경우, 첫 번째 점이 반환됩니다.
domain
은 keys
를 지원하는 비어 있지 않은 반복 가능 객체여야 합니다. 인덱스는 keys(domain)
에서 반환된 것과 동일한 유형입니다.
값은 isless
로 비교됩니다.
이 메서드는 Julia 1.7 이상이 필요합니다.
예제
julia> findmax(identity, 5:9)
(9, 5)
julia> findmax(-, 1:10)
(-1, 1)
julia> findmax(first, [(1, :a), (3, :b), (3, :c)])
(3, 2)
julia> findmax(cos, 0:π/2:2π)
(1.0, 1)
findmax(itr) -> (x, index)
컬렉션 itr
의 최대 요소와 그 인덱스 또는 키를 반환합니다. 최대 요소가 여러 개일 경우, 첫 번째 요소가 반환됩니다. 값은 isless
로 비교됩니다.
인덱스는 keys(itr)
및 pairs(itr)
에서 반환되는 것과 동일한 유형입니다.
예제
julia> findmax([8, 0.1, -9, pi])
(8.0, 1)
julia> findmax([1, 7, 7, 6])
(7, 2)
julia> findmax([1, 7, 7, NaN])
(NaN, 4)
findmax(A; dims) -> (maxval, index)
배열 입력에 대해 주어진 차원에서 최대값과 인덱스를 반환합니다. NaN
은 missing
을 제외한 모든 다른 값보다 큰 것으로 간주됩니다.
예제
julia> A = [1.0 2; 3 4]
2×2 Matrix{Float64}:
1.0 2.0
3.0 4.0
julia> findmax(A, dims=1)
([3.0 4.0], CartesianIndex{2}[CartesianIndex(2, 1) CartesianIndex(2, 2)])
julia> findmax(A, dims=2)
([2.0; 4.0;;], CartesianIndex{2}[CartesianIndex(1, 2); CartesianIndex(2, 2);;])
findmax(f, A; dims) -> (f(x), index)
배열 입력에 대해 주어진 차원에서 f
를 최대화하는 해당 값의 공역 내 값과 인덱스를 반환합니다.
예제
julia> A = [-1.0 1; -0.5 2]
2×2 Matrix{Float64}:
-1.0 1.0
-0.5 2.0
julia> findmax(abs2, A, dims=1)
([1.0 4.0], CartesianIndex{2}[CartesianIndex(1, 1) CartesianIndex(2, 2)])
julia> findmax(abs2, A, dims=2)
([1.0; 4.0;;], CartesianIndex{2}[CartesianIndex(1, 1); CartesianIndex(2, 2);;])
Base.findmin
— Functionfindmin(f, domain) -> (f(x), index)
코도메인에서 값의 쌍(즉, f
의 출력)과 해당 값의 인덱스 또는 키를 반환합니다. 이 값은 domain
(즉, f
의 입력)에서 f(x)
가 최소화되는 지점입니다. 최소 지점이 여러 개일 경우, 첫 번째 지점이 반환됩니다.
domain
은 비어 있지 않은 반복 가능 객체여야 합니다.
인덱스는 keys(domain)
및 pairs(domain)
에서 반환되는 것과 동일한 유형입니다.
NaN
은 missing
을 제외한 모든 다른 값보다 작게 처리됩니다.
이 메서드는 Julia 1.7 이상이 필요합니다.
예제
julia> findmin(identity, 5:9)
(5, 1)
julia> findmin(-, 1:10)
(-10, 10)
julia> findmin(first, [(2, :a), (2, :b), (3, :c)])
(2, 1)
julia> findmin(cos, 0:π/2:2π)
(-1.0, 3)
findmin(itr) -> (x, index)
컬렉션 itr
의 최소 요소와 그 인덱스 또는 키를 반환합니다. 최소 요소가 여러 개일 경우, 첫 번째 요소가 반환됩니다. NaN
은 missing
을 제외한 모든 값보다 작게 처리됩니다.
인덱스는 keys(itr)
및 pairs(itr)
에서 반환되는 것과 동일한 유형입니다.
예제
julia> findmin([8, 0.1, -9, pi])
(-9.0, 3)
julia> findmin([1, 7, 7, 6])
(1, 1)
julia> findmin([1, 7, 7, NaN])
(NaN, 4)
findmin(A; dims) -> (minval, index)
배열 입력에 대해 주어진 차원에서 최소값과 인덱스를 반환합니다. NaN
은 missing
을 제외한 모든 값보다 작게 처리됩니다.
예제
julia> A = [1.0 2; 3 4]
2×2 Matrix{Float64}:
1.0 2.0
3.0 4.0
julia> findmin(A, dims=1)
([1.0 2.0], CartesianIndex{2}[CartesianIndex(1, 1) CartesianIndex(1, 2)])
julia> findmin(A, dims=2)
([1.0; 3.0;;], CartesianIndex{2}[CartesianIndex(1, 1); CartesianIndex(2, 1);;])
findmin(f, A; dims) -> (f(x), index)
배열 입력에 대해, 주어진 차원에서 f
를 최소화하는 해당 값의 값과 인덱스를 반환합니다.
예제
julia> A = [-1.0 1; -0.5 2]
2×2 Matrix{Float64}:
-1.0 1.0
-0.5 2.0
julia> findmin(abs2, A, dims=1)
([0.25 1.0], CartesianIndex{2}[CartesianIndex(2, 1) CartesianIndex(1, 2)])
julia> findmin(abs2, A, dims=2)
([1.0; 0.25;;], CartesianIndex{2}[CartesianIndex(1, 1); CartesianIndex(2, 1);;])
Base.findmax!
— Functionfindmax!(rval, rind, A) -> (maxval, index)
A
의 최대값과 해당하는 선형 인덱스를 rval
과 rind
의 단일 차원에 따라 찾아서 결과를 rval
과 rind
에 저장합니다. NaN
은 missing
을 제외한 모든 다른 값보다 큰 것으로 간주됩니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 나타날 수 있습니다.
Base.findmin!
— Functionfindmin!(rval, rind, A) -> (minval, index)
A
의 최소값과 해당하는 선형 인덱스를 rval
과 rind
의 단일 차원에 따라 찾아서 결과를 rval
과 rind
에 저장합니다. NaN
은 missing
을 제외한 모든 다른 값보다 작게 처리됩니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예상치 못한 결과를 초래할 수 있습니다.
Base.sum
— Functionsum(f, itr; [init])
함수 f
를 itr
의 각 요소에 호출한 결과를 합산합니다.
반환 타입은 시스템 단어 크기보다 작은 부호 있는 정수의 경우 Int
이고, 시스템 단어 크기보다 작은 부호 없는 정수의 경우 UInt
입니다. 모든 다른 인수에 대해서는 모든 인수가 승격되는 공통 반환 타입이 찾아집니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 덧셈 항등원(즉, 0)이어야 하며, init
이 비어 있지 않은 컬렉션에 사용되는지 여부는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> sum(abs2, [2; 3; 4])
29
작은 정수 엘타입을 가진 배열에 대해 sum(A)
와 reduce(+, A)
의 중요한 차이를 주목하세요:
julia> sum(Int8[100, 28])
128
julia> reduce(+, Int8[100, 28])
-128
전자의 경우, 정수는 시스템 단어 크기로 확장되므로 결과는 128입니다. 후자의 경우, 그러한 확장이 발생하지 않으며 정수 오버플로우로 인해 -128이 됩니다.
sum(itr; [init])
모음의 모든 요소의 합계를 반환합니다.
반환 유형은 시스템 단어 크기보다 작은 부호 있는 정수의 경우 Int
이고, 시스템 단어 크기보다 작은 부호 없는 정수의 경우 UInt
입니다. 다른 모든 인수에 대해서는 모든 인수가 승격되는 공통 반환 유형이 발견됩니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 덧셈 항등원(즉, 0)이어야 하며, init
이 비어 있지 않은 컬렉션에 사용되는지 여부는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
참고: reduce
, mapreduce
, count
, union
.
예제
julia> sum(1:20)
210
julia> sum(1:20; init = 0.0)
210.0
sum(A::AbstractArray; dims)
주어진 차원에 따라 배열의 요소를 합산합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> sum(A, dims=1)
1×2 Matrix{Int64}:
4 6
julia> sum(A, dims=2)
2×1 Matrix{Int64}:
3
7
sum(f, A::AbstractArray; dims)
주어진 차원에 대해 배열의 각 요소에 함수 f
를 호출한 결과를 합산합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> sum(abs2, A, dims=1)
1×2 Matrix{Int64}:
10 20
julia> sum(abs2, A, dims=2)
2×1 Matrix{Int64}:
5
25
Base.sum!
— Functionsum!(r, A)
A
의 요소를 r
의 단일 차원에 대해 합산하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 예상치 못한 동작이 발생할 수 있습니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> sum!([1; 1], A)
2-element Vector{Int64}:
3
7
julia> sum!([1 1], A)
1×2 Matrix{Int64}:
4 6
Base.prod
— Functionprod(f, itr; [init])
itr
의 각 요소에 적용된 f
의 곱을 반환합니다.
반환 타입은 시스템 단어 크기보다 작은 부호 있는 정수의 경우 Int
이고, 시스템 단어 크기보다 작은 부호 없는 정수의 경우 UInt
입니다. 모든 다른 인수에 대해서는 모든 인수가 승격되는 공통 반환 타입이 찾아집니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 곱셈 항등원(즉, 1)이어야 하며, init
이 비어 있지 않은 컬렉션에 사용되는지 여부는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> prod(abs2, [2; 3; 4])
576
prod(itr; [init])
모음의 모든 요소의 곱을 반환합니다.
반환 유형은 시스템 단어 크기보다 작은 부호 있는 정수의 경우 Int
이고, 시스템 단어 크기보다 작은 부호 없는 정수의 경우 UInt
입니다. 모든 다른 인수에 대해서는 모든 인수가 승격되는 공통 반환 유형이 찾아집니다.
빈 itr
에 대해 반환되는 값은 init
으로 지정할 수 있습니다. 이는 곱셈 항등원(즉, 1)이어야 하며, init
이 비어 있지 않은 컬렉션에 사용되는지 여부는 명시되지 않았습니다.
키워드 인수 init
은 Julia 1.6 이상이 필요합니다.
예제
julia> prod(1:5)
120
julia> prod(1:5; init = 1.0)
120.0
prod(A::AbstractArray; dims)
주어진 차원에 따라 배열의 요소를 곱합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> prod(A, dims=1)
1×2 Matrix{Int64}:
3 8
julia> prod(A, dims=2)
2×1 Matrix{Int64}:
2
12
prod(f, A::AbstractArray; dims)
주어진 차원에 대해 배열의 각 요소에 대한 함수 f
호출 결과를 곱합니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> prod(abs2, A, dims=1)
1×2 Matrix{Int64}:
9 64
julia> prod(abs2, A, dims=2)
2×1 Matrix{Int64}:
4
144
Base.prod!
— Functionprod!(r, A)
A
의 요소를 r
의 단일 차원에 걸쳐 곱하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 될 수 있습니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> prod!([1; 1], A)
2-element Vector{Int64}:
2
12
julia> prod!([1 1], A)
1×2 Matrix{Int64}:
3 8
Base.any
— Methodany(itr) -> Bool
부울 컬렉션의 요소 중 하나라도 true
인지 테스트하고, itr
에서 첫 번째 true
값을 찾는 즉시 true
를 반환합니다(단락 회로). false
에 대해 단락 회로를 사용하려면 all
을 사용하십시오.
입력에 missing
값이 포함되어 있으면, 모든 비어 있지 않은 값이 false
인 경우(또는 입력에 true
값이 포함되어 있지 않은 경우) missing
을 반환하며, 이는 삼값 논리를 따릅니다.
또한 참조: all
, count
, sum
, |
, , ||
.
예제
julia> a = [true,false,false,true]
4-element Vector{Bool}:
1
0
0
1
julia> any(a)
true
julia> any((println(i); v) for (i, v) in enumerate(a))
1
true
julia> any([missing, true])
true
julia> any([false, missing])
missing
Base.any
— Methodany(p, itr) -> Bool
조건부 p
가 itr
의 어떤 요소에 대해 true
를 반환하는지 확인하고, p
가 true
를 반환하는 itr
의 첫 번째 항목을 만나는 즉시 true
를 반환합니다(단락 회로). false
에 대해 단락 회로를 사용하려면 all
을 사용하십시오.
입력에 missing
값이 포함되어 있으면, 모든 비어 있지 않은 값이 false
인 경우(또는 입력에 true
값이 포함되어 있지 않은 경우) missing
을 반환하며, 삼값 논리를 따릅니다.
예제
julia> any(i->(4<=i<=6), [3,5,7])
true
julia> any(i -> (println(i); i > 3), 1:10)
1
2
3
4
true
julia> any(i -> i > 0, [1, missing])
true
julia> any(i -> i > 0, [-1, missing])
missing
julia> any(i -> i > 0, [-1, 0])
false
Base.any!
— Functionany!(r, A)
A
의 단일 차원에 따라 true
인 값이 있는지 테스트하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 나타날 수 있습니다.
예제
julia> A = [true false; true false]
2×2 Matrix{Bool}:
1 0
1 0
julia> any!([1; 1], A)
2-element Vector{Int64}:
1
1
julia> any!([1 1], A)
1×2 Matrix{Int64}:
1 0
Base.all
— Methodall(itr) -> Bool
부울 컬렉션의 모든 요소가 true
인지 테스트하고, itr
에서 첫 번째 false
값이 발견되는 즉시 false
를 반환합니다(단락 회로). true
에 대해 단락 회로를 사용하려면 any
를 사용하십시오.
입력에 missing
값이 포함되어 있으면, 모든 비어 있지 않은 값이 true
인 경우(또는 입력에 false
값이 포함되어 있지 않은 경우) missing
을 반환하며, 이는 삼값 논리를 따릅니다.
또한 참조: all!
, any
, count
, &
, , &&
, allunique
.
예제
julia> a = [true,false,false,true]
4-element Vector{Bool}:
1
0
0
1
julia> all(a)
false
julia> all((println(i); v) for (i, v) in enumerate(a))
1
2
false
julia> all([missing, false])
false
julia> all([true, missing])
missing
Base.all
— Methodall(p, itr) -> Bool
프레디케이트 p
가 itr
의 모든 요소에 대해 true
를 반환하는지 확인하고, p
가 false
를 반환하는 itr
의 첫 번째 항목을 만나는 즉시 false
를 반환합니다(단락 회로). true
에 대해 단락 회로를 사용하려면 any
를 사용하세요.
입력에 missing
값이 포함되어 있으면, 모든 비어 있지 않은 값이 true
인 경우(또는 입력에 false
값이 포함되어 있지 않은 경우) missing
을 반환하며, 삼값 논리를 따릅니다.
예제
julia> all(i->(4<=i<=6), [4,5,6])
true
julia> all(i -> (println(i); i < 3), 1:10)
1
2
3
false
julia> all(i -> i > 0, [1, missing])
missing
julia> all(i -> i > 0, [-1, missing])
false
julia> all(i -> i > 0, [1, 2])
true
Base.all!
— Functionall!(r, A)
A
의 단일 차원에 있는 모든 값이 true
인지 테스트하고 결과를 r
에 기록합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 동작이 예기치 않게 될 수 있습니다.
예제
julia> A = [true false; true false]
2×2 Matrix{Bool}:
1 0
1 0
julia> all!([1; 1], A)
2-element Vector{Int64}:
0
0
julia> all!([1 1], A)
1×2 Matrix{Int64}:
1 0
Base.count
— Functioncount([f=identity,] itr; init=0) -> Integer
f
함수가 true
를 반환하는 itr
의 요소 수를 계산합니다. f
가 생략되면 itr
에서 true
요소의 수를 계산합니다(불리언 값의 컬렉션이어야 함). init
은 선택적으로 카운팅을 시작할 값을 지정하며, 따라서 출력 유형도 결정합니다.
init
키워드는 Julia 1.6에서 추가되었습니다.
예제
julia> count(i->(4<=i<=6), [2,3,4,5,6])
3
julia> count([true, false, true, true])
3
julia> count(>(3), 1:7, init=0x03)
0x07
count(
pattern::Union{AbstractChar,AbstractString,AbstractPattern},
string::AbstractString;
overlap::Bool = false,
)
pattern
이 string
에서 일치하는 횟수를 반환합니다. 이는 length(findall(pattern, string))
를 호출하는 것과 동일하지만 더 효율적입니다.
overlap=true
인 경우, 일치하는 시퀀스는 원래 문자열의 인덱스에서 겹칠 수 있지만, 그렇지 않으면 서로 다른 문자 범위에서 나와야 합니다.
이 메서드는 최소한 Julia 1.3이 필요합니다.
패턴으로 문자를 사용하는 것은 최소한 Julia 1.7이 필요합니다.
예제
julia> count('a', "JuliaLang")
2
julia> count(r"a(.)a", "cabacabac", overlap=true)
3
julia> count(r"a(.)a", "cabacabac")
2
count([f=identity,] A::AbstractArray; dims=:)
주어진 차원에 대해 f
가 true
를 반환하는 A
의 요소 수를 계산합니다.
dims
키워드는 Julia 1.5에서 추가되었습니다.
init
키워드는 Julia 1.6에서 추가되었습니다.
예제
julia> A = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> count(<=(2), A, dims=1)
1×2 Matrix{Int64}:
1 1
julia> count(<=(2), A, dims=2)
2×1 Matrix{Int64}:
2
0
Base.foreach
— Functionforeach(f, c...) -> Nothing
각 요소에 대해 함수 f
를 호출합니다. 여러 개의 iterable 인자가 있을 경우, f
는 요소별로 호출되며, 어떤 iterator가 끝나면 반복이 중지됩니다.
foreach
는 f
의 결과가 필요하지 않을 때 사용해야 합니다. 예를 들어 foreach(println, array)
와 같이 사용합니다.
예제
julia> tri = 1:3:7; res = Int[];
julia> foreach(x -> push!(res, x^2), tri)
julia> res
3-element Vector{Int64}:
1
16
49
julia> foreach((x, y) -> println(x, " with ", y), tri, 'a':'z')
1 with a
4 with b
7 with c
Base.map
— Functionmap(f, c...) -> collection
컬렉션 c
의 각 요소에 f
를 적용하여 변환합니다. 여러 개의 컬렉션 인수가 있는 경우, 요소별로 f
를 적용하며, 그 중 하나라도 소진되면 중지합니다.
자세한 내용은 map!
, foreach
, mapreduce
, mapslices
, zip
, Iterators.map
를 참조하세요.
예제
julia> map(x -> x * 2, [1, 2, 3])
3-element Vector{Int64}:
2
4
6
julia> map(+, [1, 2, 3], [10, 20, 30, 400, 5000])
3-element Vector{Int64}:
11
22
33
map(f, A::AbstractArray...) -> N-array
동일한 ndims
를 가진 다차원 배열에 작용할 때, 모든 배열은 동일한 axes
를 가져야 하며, 결과도 마찬가지입니다.
불일치하는 크기를 허용하는 broadcast
도 참고하세요.
예제
julia> map(//, [1 2; 3 4], [4 3; 2 1])
2×2 Matrix{Rational{Int64}}:
1//4 2//3
3//2 4//1
julia> map(+, [1 2; 3 4], zeros(2,1))
ERROR: DimensionMismatch
julia> map(+, [1 2; 3 4], [1,10,100,1000], zeros(3,1)) # 3번째가 소진될 때까지 반복
3-element Vector{Float64}:
2.0
13.0
102.0
Base.map!
— Functionmap!(function, destination, collection...)
map
와 유사하지만, 새로운 컬렉션이 아닌 destination
에 결과를 저장합니다. destination
은 가장 작은 컬렉션만큼은 크기가 커야 합니다.
변형된 인수 중 하나가 다른 인수와 메모리를 공유할 경우 예상치 못한 동작이 발생할 수 있습니다.
참고: map
, foreach
, zip
, copyto!
.
예제
julia> a = zeros(3);
julia> map!(x -> x * 2, a, [1, 2, 3]);
julia> a
3-element Vector{Float64}:
2.0
4.0
6.0
julia> map!(+, zeros(Int, 5), 100:999, 1:3)
5-element Vector{Int64}:
101
103
105
0
0
map!(f, values(dict::AbstractDict))
dict
를 수정하여 각 값을 val
에서 f(val)
로 변환합니다. dict
의 타입은 변경할 수 없음을 유의하세요: 만약 f(val)
이 dict
의 값 타입의 인스턴스가 아니라면, 가능할 경우 값 타입으로 변환되며, 그렇지 않으면 오류가 발생합니다.
map!(f, values(dict::AbstractDict))
는 Julia 1.2 이상이 필요합니다.
예제
julia> d = Dict(:a => 1, :b => 2)
Dict{Symbol, Int64} with 2 entries:
:a => 1
:b => 2
julia> map!(v -> v-1, values(d))
ValueIterator for a Dict{Symbol, Int64} with 2 entries. Values:
0
1
Base.mapreduce
— Methodmapreduce(f, op, itrs...; [init])
함수 f
를 itrs
의 각 요소에 적용한 다음, 이진 함수 op
를 사용하여 결과를 축소합니다. 제공된 경우, init
은 빈 컬렉션에 대해 반환될 op
의 중립 요소여야 합니다. init
이 비어 있지 않은 컬렉션에 사용되는지는 명시되어 있지 않습니다. 일반적으로 빈 컬렉션과 작업하기 위해서는 init
을 제공해야 합니다.
mapreduce
는 reduce(op, map(f, itr); init=init)
를 호출하는 것과 기능적으로 동등하지만, 중간 컬렉션을 생성할 필요가 없기 때문에 일반적으로 더 빠르게 실행됩니다. reduce
및 map
에 대한 문서를 참조하십시오.
여러 반복자를 사용하는 mapreduce
는 Julia 1.2 이상이 필요합니다.
예제
julia> mapreduce(x->x^2, +, [1:3;]) # == 1 + 4 + 9
14
축소의 결합성은 구현에 따라 다릅니다. 또한, 일부 구현에서는 itr
에 여러 번 나타나는 요소에 대해 f
의 반환 값을 재사용할 수 있습니다. 모든 값에 대해 f
를 호출하고 왼쪽 또는 오른쪽 결합성을 보장하려면 mapfoldl
또는 mapfoldr
를 사용하십시오.
Base.mapfoldl
— Methodmapfoldl(f, op, itr; [init])
mapreduce
와 유사하지만, foldl
처럼 왼쪽 결합성을 보장합니다. 제공된 경우, 키워드 인수 init
은 정확히 한 번 사용됩니다. 일반적으로 빈 컬렉션과 작업하기 위해 init
을 제공해야 합니다.
Base.mapfoldr
— Methodmapfoldr(f, op, itr; [init])
mapreduce
와 유사하지만, foldr
처럼 오른쪽 결합성을 보장합니다. 제공된 경우, 키워드 인수 init
은 정확히 한 번 사용됩니다. 일반적으로 빈 컬렉션과 작업하기 위해 init
을 제공해야 합니다.
Base.first
— Functionfirst(coll)
반복 가능한 컬렉션의 첫 번째 요소를 가져옵니다. 비어 있더라도 AbstractRange
의 시작점을 반환합니다.
참고: only
, firstindex
, last
.
예제
julia> first(2:2:10)
2
julia> first([1; 2; 3; 4])
1
first(itr, n::Integer)
iterable 컬렉션 itr
의 첫 번째 n
요소를 가져오거나, itr
가 충분히 길지 않은 경우 더 적은 요소를 가져옵니다.
참고: startswith
, Iterators.take
.
이 메서드는 최소한 Julia 1.6이 필요합니다.
예제
julia> first(["foo", "bar", "qux"], 2)
2-element Vector{String}:
"foo"
"bar"
julia> first(1:6, 10)
1:6
julia> first(Bool[], 1)
Bool[]
first(s::AbstractString, n::Integer)
문자열 s
의 처음 n
문자로 구성된 문자열을 가져옵니다.
예제
julia> first("∀ϵ≠0: ϵ²>0", 0)
""
julia> first("∀ϵ≠0: ϵ²>0", 1)
"∀"
julia> first("∀ϵ≠0: ϵ²>0", 3)
"∀ϵ≠"
Base.last
— Functionlast(coll)
정렬된 컬렉션의 마지막 요소를 가져옵니다. O(1) 시간 내에 계산할 수 있는 경우에 해당합니다. 이는 lastindex
를 호출하여 마지막 인덱스를 가져오는 방식으로 수행됩니다. 비어 있더라도 AbstractRange
의 끝점을 반환합니다.
예제
julia> last(1:2:10)
9
julia> last([1; 2; 3; 4])
4
last(itr, n::Integer)
iterable 컬렉션 itr
의 마지막 n
요소를 가져오거나, itr
가 충분히 길지 않은 경우 더 적은 요소를 가져옵니다.
이 메서드는 최소한 Julia 1.6이 필요합니다.
예제
julia> last(["foo", "bar", "qux"], 2)
2-element Vector{String}:
"bar"
"qux"
julia> last(1:6, 10)
1:6
julia> last(Float64[], 1)
Float64[]
last(s::AbstractString, n::Integer)
문자열 s
의 마지막 n
문자로 구성된 문자열을 가져옵니다.
예제
julia> last("∀ϵ≠0: ϵ²>0", 0)
""
julia> last("∀ϵ≠0: ϵ²>0", 1)
"0"
julia> last("∀ϵ≠0: ϵ²>0", 3)
"²>0"
Base.front
— Functionfront(x::Tuple)::Tuple
x
의 마지막 구성 요소를 제외한 모든 구성 요소로 이루어진 Tuple
을 반환합니다.
예제
julia> Base.front((1,2,3))
(1, 2)
julia> Base.front(())
ERROR: ArgumentError: Cannot call front on an empty tuple.
Base.tail
— Functiontail(x::Tuple)::Tuple
x
의 첫 번째 구성 요소를 제외한 모든 요소로 구성된 Tuple
을 반환합니다.
참고: front
, rest
, first
, Iterators.peel
.
예제
julia> Base.tail((1,2,3))
(2, 3)
julia> Base.tail(())
ERROR: ArgumentError: Cannot call tail on an empty tuple.
Base.step
— Functionstep(r)
AbstractRange
객체의 스텝 크기를 가져옵니다.
예제
julia> step(1:10)
1
julia> step(1:2:10)
2
julia> step(2.5:0.3:10.9)
0.3
julia> step(range(2.5, stop=10.9, length=85))
0.1
Base.collect
— Methodcollect(collection)
컬렉션 또는 반복자의 모든 항목을 포함하는 Array
를 반환합니다. 사전의 경우 key=>value
Pair로 이루어진 Vector
를 반환합니다. 인수가 배열과 유사하거나 HasShape
특성을 가진 반복자인 경우, 결과는 인수와 동일한 형태와 차원 수를 가집니다.
comprehensions에서 generator expression을 Array
로 변환하는 데 사용됩니다. 따라서 제너레이터에서는 collect
를 호출하는 대신 대괄호 표기법을 사용할 수 있습니다. 두 번째 예를 참조하세요.
예제
UnitRange{Int64}
컬렉션에서 항목 수집:
julia> collect(1:3)
3-element Vector{Int64}:
1
2
3
제너레이터에서 항목 수집 (출력은 [x^2 for x in 1:3]
와 동일):
julia> collect(x^2 for x in 1:3)
3-element Vector{Int64}:
1
4
9
Base.collect
— Methodcollect(element_type, collection)
주어진 요소 유형의 모든 항목이 포함된 Array
를 반환합니다. 결과는 collection
과 동일한 형태와 차원 수를 가집니다.
예제
julia> collect(Float64, 1:2:5)
3-element Vector{Float64}:
1.0
3.0
5.0
Base.filter
— Functionfilter(f, a)
컬렉션 a
의 복사본을 반환하며, f
가 false
인 요소를 제거합니다. 함수 f
는 하나의 인수를 받습니다.
a
를 튜플로 지원하려면 최소한 Julia 1.4가 필요합니다.
참고: filter!
, Iterators.filter
.
예제
julia> a = 1:10
1:10
julia> filter(isodd, a)
5-element Vector{Int64}:
1
3
5
7
9
filter(f)
함수를 생성하여 filter
함수를 사용하여 인수를 필터링합니다. 즉, x -> filter(f, x)
와 동등한 함수입니다.
반환된 함수는 Base.Fix1{typeof(filter)}
유형이며, 이를 사용하여 특수화된 메서드를 구현할 수 있습니다.
예제
julia> (1, 2, Inf, 4, NaN, 6) |> filter(isfinite)
(1, 2, 4, 6)
julia> map(filter(iseven), [1:3, 2:4, 3:5])
3-element Vector{Vector{Int64}}:
[2]
[2, 4]
[4]
이 메서드는 최소한 Julia 1.9가 필요합니다.
filter(f, d::AbstractDict)
f
가 false
인 요소를 제거하고 d
의 복사본을 반환합니다. 함수 f
는 key=>value
쌍을 전달받습니다.
예제
julia> d = Dict(1=>"a", 2=>"b")
Dict{Int64, String} with 2 entries:
2 => "b"
1 => "a"
julia> filter(p->isodd(p.first), d)
Dict{Int64, String} with 1 entry:
1 => "a"
filter(f, itr::SkipMissing{<:AbstractArray})
주어진 SkipMissing
반복기로 감싸인 배열과 유사한 벡터를 반환하지만, 모든 결측값과 f
가 false
를 반환하는 요소는 제거됩니다.
이 메서드는 Julia 1.2 이상이 필요합니다.
예제
julia> x = [1 2; missing 4]
2×2 Matrix{Union{Missing, Int64}}:
1 2
missing 4
julia> filter(isodd, skipmissing(x))
1-element Vector{Int64}:
1
Base.filter!
— Functionfilter!(f, a)
컬렉션 a
를 업데이트하여 f
가 false
인 요소를 제거합니다. 함수 f
는 하나의 인수를 받습니다.
예제
julia> filter!(isodd, Vector(1:10))
5-element Vector{Int64}:
1
3
5
7
9
filter!(f, d::AbstractDict)
업데이트 d
, f
가 false
인 요소를 제거합니다. 함수 f
는 key=>value
쌍을 전달받습니다.
예제
julia> d = Dict(1=>"a", 2=>"b", 3=>"c")
Dict{Int64, String} with 3 entries:
2 => "b"
3 => "c"
1 => "a"
julia> filter!(p->isodd(p.first), d)
Dict{Int64, String} with 2 entries:
3 => "c"
1 => "a"
Base.replace
— Methodreplace(A, old_new::Pair...; [count::Integer])
컬렉션 A
의 복사본을 반환하며, old_new
의 각 쌍 old=>new
에 대해 old
의 모든 발생이 new
로 대체됩니다. 동등성은 isequal
을 사용하여 결정됩니다. count
가 지정된 경우, 총 count
발생까지만 대체됩니다.
결과의 요소 유형은 A
의 요소 유형과 쌍의 new
값의 유형을 기반으로 하여 승격(promote)을 사용하여 선택됩니다(자세한 내용은 promote_type
참조). count
가 생략되고 A
의 요소 유형이 Union
인 경우, 다른 유형의 값으로 대체되는 단일 유형은 결과의 요소 유형에 포함되지 않습니다: 예를 들어, Union{T,Missing}
는 missing
이 대체되면 T
가 됩니다.
또한 replace!
, splice!
, delete!
, insert!
도 참조하십시오.
Tuple
의 요소를 대체하려면 버전 1.7이 필요합니다.
예제
julia> replace([1, 2, 1, 3], 1=>0, 2=>4, count=2)
4-element Vector{Int64}:
0
4
1
3
julia> replace([1, missing], missing=>0)
2-element Vector{Int64}:
1
0
Base.replace
— Methodreplace(new::Union{Function, Type}, A; [count::Integer])
A
의 각 값 x
를 new(x)
로 교체한 복사본을 반환합니다. count
가 지정된 경우, 총 count
값만 교체합니다(교체는 new(x) !== x
로 정의됨).
Tuple
의 요소를 교체하려면 버전 1.7이 필요합니다.
예제
julia> replace(x -> isodd(x) ? 2x : x, [1, 2, 3, 4])
4-element Vector{Int64}:
2
2
6
4
julia> replace(Dict(1=>2, 3=>4)) do kv
first(kv) < 3 ? first(kv)=>3 : kv
end
Dict{Int64, Int64} with 2 entries:
3 => 4
1 => 3
Base.replace!
— Functionreplace!(A, old_new::Pair...; [count::Integer])
각 쌍 old=>new
에 대해 old_new
에서, 컬렉션 A
에서 old
의 모든 발생을 new
로 교체합니다. 동등성은 isequal
을 사용하여 결정됩니다. count
가 지정된 경우, 총 count
발생까지만 교체합니다. 또한 replace
를 참조하십시오.
예제
julia> replace!([1, 2, 1, 3], 1=>0, 2=>4, count=2)
4-element Vector{Int64}:
0
4
1
3
julia> replace!(Set([1, 2, 3]), 1=>0)
Set{Int64} with 3 elements:
0
2
3
replace!(new::Union{Function, Type}, A; [count::Integer])
컬렉션 A
의 각 요소 x
를 new(x)
로 교체합니다. count
가 지정된 경우, 총 count
값만큼 최대한 교체합니다(교체는 new(x) !== x
로 정의됨).
예제
julia> replace!(x -> isodd(x) ? 2x : x, [1, 2, 3, 4])
4-element Vector{Int64}:
2
2
6
4
julia> replace!(Dict(1=>2, 3=>4)) do kv
first(kv) < 3 ? first(kv)=>3 : kv
end
Dict{Int64, Int64} with 2 entries:
3 => 4
1 => 3
julia> replace!(x->2x, Set([3, 6]))
Set{Int64} with 2 elements:
6
12
Base.rest
— FunctionBase.rest(collection[, itr_state])
특정 반복 상태 itr_state
에서 시작하여 collection
의 꼬리를 가져오는 일반 함수입니다. collection
이 Tuple
인 경우 Tuple
을 반환하고, collection
이 AbstractArray
인 경우 AbstractVector
의 하위 유형을 반환하며, collection
이 AbstractString
인 경우 AbstractString
의 하위 유형을 반환하고, 그렇지 않으면 임의의 반복자를 반환하며 Iterators.rest(collection[, itr_state])
로 대체됩니다.
사용자 정의 컬렉션 유형에 대해 오버로드하여 최종 위치에서 할당 시 슬러핑의 동작을 사용자 지정할 수 있습니다. 예: a, b... = collection
.
Base.rest
는 최소한 Julia 1.6이 필요합니다.
참고: first
, Iterators.rest
, Base.split_rest
.
예제
julia> a = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> first, state = iterate(a)
(1, 2)
julia> first, Base.rest(a, state)
(1, [3, 2, 4])
Base.split_rest
— FunctionBase.split_rest(collection, n::Int[, itr_state]) -> (rest_but_n, last_n)
특정 반복 상태 itr_state
에서 시작하여 collection
의 꼬리를 분할하는 일반 함수입니다. 두 개의 새로운 컬렉션으로 구성된 튜플을 반환합니다. 첫 번째 컬렉션은 마지막 n
개의 요소를 제외한 꼬리의 모든 요소를 포함하고, 두 번째 컬렉션은 마지막 n
개의 요소로 구성됩니다.
첫 번째 컬렉션의 유형은 일반적으로 Base.rest
의 유형을 따르지만, 기본 사례는 게으르지 않고 벡터로 즉시 수집됩니다.
사용자 정의 컬렉션 유형에 대해 오버로드할 수 있으며, 이는 비최종 위치에서 할당 시 슬러핑의 동작을 사용자 정의하는 데 사용됩니다. 예: a, b..., c = collection
.
Base.split_rest
는 최소한 Julia 1.9가 필요합니다.
참고: Base.rest
.
예제
julia> a = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> first, state = iterate(a)
(1, 2)
julia> first, Base.split_rest(a, 1, state)
(1, ([3, 2], [4]))
Indexable Collections
Base.getindex
— Functiongetindex(collection, key...)
주어진 키 또는 인덱스에 저장된 값들을 컬렉션에서 검색합니다. 구문 a[i,j,...]
는 컴파일러에 의해 getindex(a, i, j, ...)
로 변환됩니다.
또한 get
, keys
, eachindex
를 참조하세요.
예제
julia> A = Dict("a" => 1, "b" => 2)
Dict{String, Int64} with 2 entries:
"b" => 2
"a" => 1
julia> getindex(A, "a")
1
Base.setindex!
— Functionsetindex!(collection, value, key...)
주어진 값(value)을 컬렉션 내의 주어진 키(key) 또는 인덱스(index)에 저장합니다. 구문 a[i,j,...] = x
는 컴파일러에 의해 (setindex!(a, x, i, j, ...); x)
로 변환됩니다.
예제
julia> a = Dict("a"=>1)
Dict{String, Int64} with 1 entry:
"a" => 1
julia> setindex!(a, 2, "b")
Dict{String, Int64} with 2 entries:
"b" => 2
"a" => 1
Base.firstindex
— Functionfirstindex(collection) -> 정수
firstindex(collection, d) -> 정수
collection
의 첫 번째 인덱스를 반환합니다. d
가 주어지면, 차원 d
에서 collection
의 첫 번째 인덱스를 반환합니다.
구문 A[begin]
및 A[1, begin]
은 각각 A[firstindex(A)]
및 A[1, firstindex(A, 2)]
로 변환됩니다.
참고: first
, axes
, lastindex
, nextind
.
예제
julia> firstindex([1,2,4])
1
julia> firstindex(rand(3,4,5), 2)
1
Base.lastindex
— Functionlastindex(collection) -> Integer
lastindex(collection, d) -> Integer
collection
의 마지막 인덱스를 반환합니다. d
가 주어지면, 차원 d
에서 collection
의 마지막 인덱스를 반환합니다.
구문 A[end]
와 A[end, end]
는 각각 A[lastindex(A)]
와 A[lastindex(A, 1), lastindex(A, 2)]
로 변환됩니다.
참고: axes
, firstindex
, eachindex
, prevind
.
예제
julia> lastindex([1,2,4])
3
julia> lastindex(rand(3,4,5), 2)
4
완전히 구현됨:
부분적으로 구현됨:
Dictionaries
Dict
는 표준 사전입니다. 그 구현은 키에 대한 해싱 함수로 hash
를 사용하고, 동등성을 결정하기 위해 isequal
를 사용합니다. 사용자 정의 유형에 대해 이 두 함수를 정의하여 해시 테이블에 저장되는 방식을 재정의하십시오.
IdDict
는 키가 항상 객체 식별자인 특별한 해시 테이블입니다.
WeakKeyDict
는 키가 객체에 대한 약한 참조인 해시 테이블 구현으로, 해시 테이블에서 참조되고 있더라도 가비지 컬렉션될 수 있습니다. Dict
와 마찬가지로 해싱을 위해 hash
를 사용하고 동등성을 위해 isequal
을 사용하지만, Dict
와는 달리 삽입 시 키를 변환하지 않습니다.
Dict
는 =>
로 구성된 쌍 객체를 4d61726b646f776e2e436f64652822222c2022446963742229_40726566
생성자에 전달하여 생성할 수 있습니다: Dict("A"=>1, "B"=>2)
. 이 호출은 키와 값에서 타입 정보를 유추하려고 시도합니다 (즉, 이 예제는 Dict{String, Int64}
를 생성합니다). 타입을 명시적으로 지정하려면 Dict{KeyType,ValueType}(...)
구문을 사용하세요. 예를 들어, Dict{String,Int32}("A"=>1, "B"=>2)
입니다.
사전은 생성기를 사용하여 생성할 수도 있습니다. 예를 들어, Dict(i => f(i) for i = 1:10)
입니다.
주어진 사전 D
에서 구문 D[x]
는 키 x
의 값을 반환합니다(존재하는 경우) 또는 오류를 발생시키며, D[x] = y
는 키-값 쌍 x => y
를 D
에 저장합니다(키 x
에 대한 기존 값을 대체함). D[...]
에 대한 여러 인수는 튜플로 변환됩니다. 예를 들어, 구문 D[x,y]
는 D[(x,y)]
와 동일하며, 즉 튜플 (x,y)
로 키가 지정된 값을 참조합니다.
Base.AbstractDict
— TypeAbstractDict{K, V}
키가 K
유형이고 값이 V
유형인 사전과 유사한 유형의 슈퍼타입입니다. Dict
, IdDict
및 기타 유형은 이의 하위 유형입니다. AbstractDict{K, V}
는 Pair{K, V}
의 반복자여야 합니다.
Base.Dict
— TypeDict([itr])
Dict{K,V}()
는 타입 K
의 키와 타입 V
의 값을 가진 해시 테이블을 생성합니다. 키는 isequal
로 비교되고 hash
로 해시됩니다.
단일 iterable 인수를 주면, 인수에 의해 생성된 2-튜플 (key,value)
에서 키-값 쌍을 가져오는 Dict
를 생성합니다.
예제
julia> Dict([("A", 1), ("B", 2)])
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
대안으로, 쌍 인수의 시퀀스를 전달할 수 있습니다.
julia> Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
!!! 경고 키는 변경 가능하지만, 저장된 키를 변경하면 해시 테이블이 내부적으로 일관성이 없게 될 수 있으며, 이 경우 Dict
가 제대로 작동하지 않습니다. 키를 변경해야 하는 경우 IdDict
가 대안이 될 수 있습니다.
Base.IdDict
— TypeIdDict([itr])
IdDict{K,V}()
는 objectid
를 해시로 사용하고 ===
를 동등성으로 사용하여 키의 유형이 K
이고 값의 유형이 V
인 해시 테이블을 구성합니다. 추가 도움은 Dict
를 참조하고, 이의 집합 버전은 IdSet
를 참조하세요.
아래 예제에서 Dict
키는 모두 isequal
이므로 동일하게 해시되어 덮어씌워집니다. IdDict
는 객체 ID로 해시하므로 3개의 서로 다른 키를 유지합니다.
예제
julia> Dict(true => "yes", 1 => "no", 1.0 => "maybe")
Dict{Real, String} with 1 entry:
1.0 => "maybe"
julia> IdDict(true => "yes", 1 => "no", 1.0 => "maybe")
IdDict{Any, String} with 3 entries:
true => "yes"
1.0 => "maybe"
1 => "no"
Base.WeakKeyDict
— TypeWeakKeyDict([itr])
WeakKeyDict()
는 해시 테이블을 구성하며, 여기서 키는 가비지 컬렉션될 수 있는 객체에 대한 약한 참조입니다. 해시 테이블에서 참조되고 있을 때도 마찬가지입니다.
추가 도움을 원하시면 Dict
를 참조하세요. Dict
와는 달리, WeakKeyDict
는 삽입 시 키를 변환하지 않습니다. 이는 삽입 전에 키 객체가 어디에서도 참조되지 않았음을 의미합니다.
또한 WeakRef
도 참조하세요.
Base.ImmutableDict
— TypeImmutableDict
ImmutableDict
는 불변 연결 리스트로 구현된 사전으로, 많은 개별 삽입을 통해 구성된 작은 사전에 최적화되어 있습니다. 값을 제거하는 것은 불가능하지만, 동일한 키로 새 값을 삽입하여 부분적으로 덮어쓰고 숨길 수 있습니다.
ImmutableDict(KV::Pair)
key => value
쌍에 대한 ImmutableDict
에 새 항목을 만듭니다.
(key => value) in dict
를 사용하여 이 특정 조합이 속성 집합에 있는지 확인합니다.get(dict, key, default)
를 사용하여 특정 키에 대한 가장 최근 값을 검색합니다.
Base.PersistentDict
— TypePersistentDict
PersistentDict
는 해시 배열 매핑 트리로 구현된 사전으로, 지속성이 필요한 상황에 최적화되어 있습니다. 각 작업은 이전 것과 분리된 새로운 사전을 반환하지만, 기본 구현은 공간 효율적이며 여러 개의 별도 사전 간에 저장소를 공유할 수 있습니다.
IdDict처럼 동작합니다.
PersistentDict(KV::Pair)
예제
julia> dict = Base.PersistentDict(:a=>1)
Base.PersistentDict{Symbol, Int64} with 1 entry:
:a => 1
julia> dict2 = Base.delete(dict, :a)
Base.PersistentDict{Symbol, Int64}()
julia> dict3 = Base.PersistentDict(dict, :a=>2)
Base.PersistentDict{Symbol, Int64} with 1 entry:
:a => 2
Base.haskey
— Functionhaskey(collection, key) -> Bool
주어진 key
에 대한 매핑이 컬렉션에 있는지 여부를 결정합니다.
예제
julia> D = Dict('a'=>2, 'b'=>3)
Dict{Char, Int64} with 2 entries:
'a' => 2
'b' => 3
julia> haskey(D, 'a')
true
julia> haskey(D, 'c')
false
Base.get
— Functionget(collection, key, default)
주어진 키에 대해 저장된 값을 반환하며, 키에 대한 매핑이 없으면 주어진 기본값을 반환합니다.
튜플과 숫자의 경우, 이 함수는 최소한 Julia 1.7이 필요합니다.
예제
julia> d = Dict("a"=>1, "b"=>2);
julia> get(d, "a", 3)
1
julia> get(d, "c", 3)
3
get(f::Union{Function, Type}, collection, key)
주어진 키에 대해 저장된 값을 반환하거나, 키에 대한 매핑이 없으면 f()
를 반환합니다. 기본값을 사전에 저장하려면 get!
를 사용하세요.
이것은 do
블록 구문을 사용하여 호출되도록 설계되었습니다.
get(dict, key) do
# 기본값은 여기에서 계산됩니다.
time()
end
Base.get!
— Functionget!(collection, key, default)
주어진 키에 대해 저장된 값을 반환하거나, 키에 대한 매핑이 없으면 key => default
를 저장하고 default
를 반환합니다.
예제
julia> d = Dict("a"=>1, "b"=>2, "c"=>3);
julia> get!(d, "a", 5)
1
julia> get!(d, "d", 4)
4
julia> d
Dict{String, Int64} with 4 entries:
"c" => 3
"b" => 2
"a" => 1
"d" => 4
get!(f::Union{Function, Type}, collection, key)
주어진 키에 대해 저장된 값을 반환하거나, 키에 대한 매핑이 없으면 key => f()
를 저장하고 f()
를 반환합니다.
이것은 do
블록 구문을 사용하여 호출되도록 설계되었습니다.
예제
julia> squares = Dict{Int, Int}();
julia> function get_square!(d, i)
get!(d, i) do
i^2
end
end
get_square! (generic function with 1 method)
julia> get_square!(squares, 2)
4
julia> squares
Dict{Int64, Int64} with 1 entry:
2 => 4
Base.getkey
— Functiongetkey(collection, key, default)
주어진 key
와 일치하는 키가 collection
에 존재하면 해당 키를 반환하고, 그렇지 않으면 default
를 반환합니다.
예제
julia> D = Dict('a'=>2, 'b'=>3)
Dict{Char, Int64} with 2 entries:
'a' => 2
'b' => 3
julia> getkey(D, 'a', 1)
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
julia> getkey(D, 'd', 'a')
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
Base.delete!
— Functiondelete!(collection, key)
주어진 키에 대한 매핑을 컬렉션에서 삭제하고, 컬렉션을 반환합니다.
예제
julia> d = Dict("a"=>1, "b"=>2)
Dict{String, Int64} with 2 entries:
"b" => 2
"a" => 1
julia> delete!(d, "b")
Dict{String, Int64} with 1 entry:
"a" => 1
julia> delete!(d, "b") # d는 변경되지 않음
Dict{String, Int64} with 1 entry:
"a" => 1
Base.pop!
— Methodpop!(collection, key[, default])
collection
에 key
가 존재하면 해당 매핑을 삭제하고 반환하고, 그렇지 않으면 default
를 반환하거나 default
가 지정되지 않은 경우 오류를 발생시킵니다.
예제
julia> d = Dict("a"=>1, "b"=>2, "c"=>3);
julia> pop!(d, "a")
1
julia> pop!(d, "d")
ERROR: KeyError: key "d" not found
Stacktrace:
[...]
julia> pop!(d, "e", 4)
4
Base.keys
— Functionkeys(iterator)
키와 값이 있는 반복자 또는 컬렉션(예: 배열 및 사전)에 대해 키에 대한 반복자를 반환합니다.
Base.values
— Functionvalues(iterator)
키와 값이 있는 반복자 또는 컬렉션에 대해 값에 대한 반복자를 반환합니다. 이 함수는 기본적으로 인수를 그대로 반환합니다. 일반적인 반복자의 요소는 보통 "값"으로 간주되기 때문입니다.
예제
julia> d = Dict("a"=>1, "b"=>2);
julia> values(d)
ValueIterator for a Dict{String, Int64} with 2 entries. Values:
2
1
julia> values([2])
1-element Vector{Int64}:
2
values(a::AbstractDict)
모음의 모든 값에 대한 반복자를 반환합니다. collect(values(a))
는 값의 배열을 반환합니다. 값이 해시 테이블에 내부적으로 저장될 때, Dict
의 경우와 같이 반환되는 순서는 달라질 수 있습니다. 그러나 keys(a)
, values(a)
및 pairs(a)
는 모두 a
를 반복하고 동일한 순서로 요소를 반환합니다.
예제
julia> D = Dict('a'=>2, 'b'=>3)
Dict{Char, Int64} with 2 entries:
'a' => 2
'b' => 3
julia> collect(values(D))
2-element Vector{Int64}:
2
3
Base.pairs
— Functionpairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)
배열 A
의 각 요소에 접근하는 반복자로, i => x
를 반환합니다. 여기서 i
는 요소의 인덱스이고 x = A[i]
입니다. pairs(A)
와 동일하지만 인덱스 스타일을 선택할 수 있습니다. 또한 enumerate(A)
와 유사하지만, i
는 A
의 유효한 인덱스가 되며, enumerate
는 항상 1부터 세기 때문에 A
의 인덱스와는 관계가 없습니다.
IndexLinear()
를 지정하면 i
가 정수가 되도록 보장합니다. IndexCartesian()
를 지정하면 i
가 Base.CartesianIndex
가 되도록 보장합니다. IndexStyle(A)
를 지정하면 배열 A
의 기본 인덱싱 스타일로 정의된 것을 선택합니다.
기본 배열의 경계를 변경하면 이 반복자는 무효화됩니다.
예제
julia> A = ["a" "d"; "b" "e"; "c" "f"];
julia> for (index, value) in pairs(IndexStyle(A), A)
println("$index $value")
end
1 a
2 b
3 c
4 d
5 e
6 f
julia> S = view(A, 1:2, :);
julia> for (index, value) in pairs(IndexStyle(S), S)
println("$index $value")
end
CartesianIndex(1, 1) a
CartesianIndex(2, 1) b
CartesianIndex(1, 2) d
CartesianIndex(2, 2) e
자세한 내용은 IndexStyle
, axes
를 참조하세요.
pairs(collection)
key => value
쌍에 대한 반복자를 반환합니다. 이는 키 집합을 값 집합에 매핑하는 모든 컬렉션에 해당합니다. 여기에는 배열이 포함되며, 배열의 키는 배열 인덱스입니다. 항목이 해시 테이블에 내부적으로 저장되는 경우, 예를 들어 Dict
의 경우, 반환되는 순서는 달라질 수 있습니다. 그러나 keys(a)
, values(a)
및 pairs(a)
는 모두 a
를 반복하고 동일한 순서로 요소를 반환합니다.
예제
julia> a = Dict(zip(["a", "b", "c"], [1, 2, 3]))
Dict{String, Int64} with 3 entries:
"c" => 3
"b" => 2
"a" => 1
julia> pairs(a)
Dict{String, Int64} with 3 entries:
"c" => 3
"b" => 2
"a" => 1
julia> foreach(println, pairs(["a", "b", "c"]))
1 => "a"
2 => "b"
3 => "c"
julia> (;a=1, b=2, c=3) |> pairs |> collect
3-element Vector{Pair{Symbol, Int64}}:
:a => 1
:b => 2
:c => 3
julia> (;a=1, b=2, c=3) |> collect
3-element Vector{Int64}:
1
2
3
Base.merge
— Functionmerge(initial::Face, others::Face...)
initial
얼굴과 others
의 속성을 병합하며, 나중의 얼굴이 우선권을 가집니다.
merge(d::AbstractDict, others::AbstractDict...)
주어진 컬렉션에서 병합된 컬렉션을 생성합니다. 필요한 경우, 결과 컬렉션의 유형은 병합된 컬렉션의 유형을 수용하도록 승격됩니다. 동일한 키가 다른 컬렉션에 존재하는 경우, 해당 키의 값은 나열된 마지막 컬렉션에서 가진 값이 됩니다. 동일한 키를 가진 값에 대한 사용자 정의 처리를 위해 mergewith
도 참조하십시오.
예제
julia> a = Dict("foo" => 0.0, "bar" => 42.0)
Dict{String, Float64} with 2 entries:
"bar" => 42.0
"foo" => 0.0
julia> b = Dict("baz" => 17, "bar" => 4711)
Dict{String, Int64} with 2 entries:
"bar" => 4711
"baz" => 17
julia> merge(a, b)
Dict{String, Float64} with 3 entries:
"bar" => 4711.0
"baz" => 17.0
"foo" => 0.0
julia> merge(b, a)
Dict{String, Float64} with 3 entries:
"bar" => 42.0
"baz" => 17.0
"foo" => 0.0
merge(a::NamedTuple, bs::NamedTuple...)
두 개 이상의 기존 이름 있는 튜플을 왼쪽 결합 방식으로 병합하여 새로운 이름 있는 튜플을 생성합니다. 병합은 이름 있는 튜플 쌍 사이에서 왼쪽에서 오른쪽으로 진행되며, 따라서 가장 왼쪽과 가장 오른쪽 이름 있는 튜플 모두에 존재하는 필드의 순서는 가장 왼쪽 이름 있는 튜플에서 발견된 순서와 동일한 위치를 차지합니다. 그러나 값은 해당 필드를 포함하는 가장 오른쪽 이름 있는 튜플의 일치하는 필드에서 가져옵니다. 쌍의 가장 오른쪽 이름 있는 튜플에만 존재하는 필드는 끝에 추가됩니다. 단일 이름 있는 튜플만 제공될 때를 위한 폴백이 구현되어 있으며, 서명은 merge(a::NamedTuple)
입니다.
3개 이상의 NamedTuple
을 병합하려면 최소한 Julia 1.1이 필요합니다.
예제
julia> merge((a=1, b=2, c=3), (b=4, d=5))
(a = 1, b = 4, c = 3, d = 5)
julia> merge((a=1, b=2), (b=3, c=(d=1,)), (c=(d=2,),))
(a = 1, b = 3, c = (d = 2,))
merge(a::NamedTuple, iterable)
키-값 쌍의 iterable을 명명된 튜플로 해석하고 병합을 수행합니다.
julia> merge((a=1, b=2, c=3), [:b=>4, :d=>5])
(a = 1, b = 4, c = 3, d = 5)
Base.mergewith
— Functionmergewith(combine, d::AbstractDict, others::AbstractDict...)
mergewith(combine)
merge(combine, d::AbstractDict, others::AbstractDict...)
주어진 컬렉션에서 병합된 컬렉션을 구성합니다. 필요한 경우, 결과 컬렉션의 유형은 병합된 컬렉션의 유형을 수용하도록 승격됩니다. 동일한 키를 가진 값은 조합기 함수를 사용하여 결합됩니다. 커리된 형태 mergewith(combine)
는 함수 (args...) -> mergewith(combine, args...)
를 반환합니다.
메서드 merge(combine::Union{Function,Type}, args...)
는 mergewith(combine, args...)
의 별칭으로 여전히 사용 가능하여 이전 호환성을 유지합니다.
mergewith
는 Julia 1.5 이상이 필요합니다.
예제
julia> a = Dict("foo" => 0.0, "bar" => 42.0)
Dict{String, Float64} with 2 entries:
"bar" => 42.0
"foo" => 0.0
julia> b = Dict("baz" => 17, "bar" => 4711)
Dict{String, Int64} with 2 entries:
"bar" => 4711
"baz" => 17
julia> mergewith(+, a, b)
Dict{String, Float64} with 3 entries:
"bar" => 4753.0
"baz" => 17.0
"foo" => 0.0
julia> ans == mergewith(+)(a, b)
true
Base.merge!
— Functionmerge!(d::AbstractDict, others::AbstractDict...)
다른 컬렉션의 쌍으로 컬렉션을 업데이트합니다. merge
도 참조하십시오.
예제
julia> d1 = Dict(1 => 2, 3 => 4);
julia> d2 = Dict(1 => 4, 4 => 5);
julia> merge!(d1, d2);
julia> d1
Dict{Int64, Int64} with 3 entries:
4 => 5
3 => 4
1 => 4
Base.mergewith!
— Functionmergewith!(combine, d::AbstractDict, others::AbstractDict...) -> d
mergewith!(combine)
merge!(combine, d::AbstractDict, others::AbstractDict...) -> d
다른 컬렉션의 쌍으로 컬렉션을 업데이트합니다. 동일한 키를 가진 값은 조합기 함수를 사용하여 결합됩니다. 커리된 형태인 mergewith!(combine)
는 함수 (args...) -> mergewith!(combine, args...)
를 반환합니다.
메서드 merge!(combine::Union{Function,Type}, args...)
는 mergewith!(combine, args...)
의 별칭으로 여전히 사용 가능하여 이전 버전과의 호환성을 유지합니다.
mergewith!
는 Julia 1.5 이상이 필요합니다.
예제
julia> d1 = Dict(1 => 2, 3 => 4);
julia> d2 = Dict(1 => 4, 4 => 5);
julia> mergewith!(+, d1, d2);
julia> d1
Dict{Int64, Int64} with 3 entries:
4 => 5
3 => 4
1 => 6
julia> mergewith!(-, d1, d1);
julia> d1
Dict{Int64, Int64} with 3 entries:
4 => 0
3 => 0
1 => 0
julia> foldl(mergewith!(+), [d1, d2]; init=Dict{Int64, Int64}())
Dict{Int64, Int64} with 3 entries:
4 => 5
3 => 0
1 => 4
Base.sizehint!
— Functionsizehint!(s, n; first::Bool=false, shrink::Bool=true) -> s
컬렉션 s
가 최소 n
개의 요소를 위한 용량을 예약하도록 제안합니다. 즉, s
에 많은 값을 푸시해야 할 것으로 예상되는 경우, 미리 한 번에 예약함으로써 점진적인 재할당의 비용을 피할 수 있습니다. 이는 성능을 향상시킬 수 있습니다.
first
가 true
인 경우, 추가 공간은 컬렉션의 시작 전에 예약됩니다. 이렇게 하면 이후의 pushfirst!
호출(대신 push!
사용) 속도가 빨라질 수 있습니다. 이 키워드를 제공하면 컬렉션이 정렬되지 않았거나 pushfirst!
가 이 컬렉션에 대해 지원되지 않는 경우 오류가 발생할 수 있습니다.
shrink=true
(기본값)인 경우, 현재 용량이 n
보다 클 경우 컬렉션의 용량이 줄어들 수 있습니다.
또한 resize!
를 참조하십시오.
성능 모델에 대한 노트
sizehint!
를 지원하는 타입의 경우,
push!
및append!
메서드는 일반적으로 추가 저장소를 미리 할당할 수 있지만(필수는 아님) 그렇게 할 수 있습니다.Base
에 구현된 타입의 경우, 일반적으로 그렇게 하며, 일반적인 사용 사례에 최적화된 휴리스틱을 사용합니다.sizehint!
는 이 미리 할당을 제어할 수 있습니다. 다시 말해, 일반적으로Base
의 타입에 대해 그렇게 합니다.empty!
는 이러한 종류의 미리 할당을 지원하는 타입에 대해 거의 비용이 들지 않으며(O(1))입니다.
shrink
및 first
인자는 Julia 1.11에서 추가되었습니다.
Base.keytype
— Functionkeytype(T::Type{<:AbstractArray})
keytype(A::AbstractArray)
배열의 키 유형을 반환합니다. 이는 keys(...)
의 결과의 eltype
와 같으며, 주로 사전 인터페이스와의 호환성을 위해 제공됩니다.
예제
julia> keytype([1, 2, 3]) == Int
true
julia> keytype([1 2; 3 4])
CartesianIndex{2}
배열의 경우, 이 함수는 최소한 Julia 1.2가 필요합니다.
Base.valtype
— Functionvaltype(T::Type{<:AbstractArray})
valtype(A::AbstractArray)
배열의 값 유형을 반환합니다. 이는 eltype
와 동일하며 주로 사전 인터페이스와의 호환성을 위해 제공됩니다.
예제
julia> valtype(["one", "two", "three"])
String
배열의 경우, 이 함수는 최소한 Julia 1.2가 필요합니다.
valtype(type)
사전 유형의 값 유형을 가져옵니다. eltype
와 유사하게 동작합니다.
예제
julia> valtype(Dict(Int32(1) => "foo"))
String
완전히 구현됨:
부분적으로 구현됨:
Set-Like Collections
Base.AbstractSet
— TypeBase.Set
— TypeSet{T} <: AbstractSet{T}
Set
는 빠른 멤버십 테스트를 제공하는 가변 컨테이너입니다.
Set
는 in
, union
, intersect
와 같은 집합 연산의 효율적인 구현을 가지고 있습니다. Set
의 요소는 isequal
의 정의에 의해 결정된 고유한 요소입니다. Set
의 요소 순서는 구현 세부 사항이며 신뢰할 수 없습니다.
참고: AbstractSet
, BitSet
, Dict
, push!
, empty!
, union!
, in
, isequal
예제
julia> s = Set("aaBca")
Set{Char} with 3 elements:
'a'
'c'
'B'
julia> push!(s, 'b')
Set{Char} with 4 elements:
'a'
'b'
'B'
'c'
julia> s = Set([NaN, 0.0, 1.0, 2.0]);
julia> -0.0 in s # isequal(0.0, -0.0) is false
false
julia> NaN in s # isequal(NaN, NaN) is true
true
Base.BitSet
— TypeBitSet([itr])
주어진 반복 가능한 객체에 의해 생성된 정수 Int
의 정렬된 집합을 구성하거나 빈 집합을 구성합니다. 비트 문자열로 구현되었으며, 따라서 조밀한 정수 집합을 위해 설계되었습니다. 집합이 희소할 경우(예: 몇 개의 매우 큰 정수를 포함하는 경우) 대신 Set
를 사용하십시오.
Base.IdSet
— TypeIdSet{T}([itr])
IdSet()
IdSet{T}()는 T
유형의 값에 대해 동등성으로 ===
를 사용하여 집합(see Set
)을 구성합니다.
아래 예제에서 값들은 모두 isequal
이므로 일반 Set
에서 덮어씌워집니다. IdSet
은 ===
로 비교하므로 3개의 서로 다른 값을 보존합니다.
예제
julia> Set(Any[true, 1, 1.0])
Set{Any} with 1 element:
1.0
julia> IdSet{Any}(Any[true, 1, 1.0])
IdSet{Any} with 3 elements:
1.0
1
true
Base.union
— Functionunion(s, itrs...)
∪(s, itrs...)
모든 인수에서 고유한 요소를 포함하는 객체를 생성합니다.
첫 번째 인수는 반환되는 컨테이너의 종류를 제어합니다. 이것이 배열인 경우, 요소가 처음 나타나는 순서를 유지합니다.
유니코드 ∪
는 Julia REPL에서 \cup
를 입력한 후 탭을 눌러 입력할 수 있으며, 많은 편집기에서도 가능합니다. 이것은 중위 연산자로, s ∪ itr
형태로 사용할 수 있습니다.
또한 unique
, intersect
, isdisjoint
, vcat
, Iterators.flatten
를 참조하세요.
예제
julia> union([1, 2], [3])
3-element Vector{Int64}:
1
2
3
julia> union([4 2 3 4 4], 1:3, 3.0)
4-element Vector{Float64}:
4.0
2.0
3.0
1.0
julia> (0, 0.0) ∪ (-0.0, NaN)
3-element Vector{Real}:
0
-0.0
NaN
julia> union(Set([1, 2]), 2:3)
Set{Int64} with 3 elements:
2
3
1
Base.union!
— Functionunion!(s::Union{AbstractSet,AbstractVector}, itrs...)
전달된 집합의 union
를 구성하고 결과로 s
를 덮어씁니다. 배열의 순서를 유지합니다.
!!! 경고 변형된 인수 중 하나가 다른 인수와 메모리를 공유할 경우 동작이 예기치 않게 될 수 있습니다.
예제
julia> a = Set([3, 4, 5]);
julia> union!(a, 1:2:7);
julia> a
Set{Int64} with 5 elements:
5
4
7
3
1
Base.intersect
— Functionintersect(s, itrs...)
∩(s, itrs...)
모든 인수에 나타나는 요소를 포함하는 집합을 구성합니다.
첫 번째 인수는 반환되는 컨테이너의 종류를 제어합니다. 이것이 배열인 경우, 요소가 처음 나타나는 순서를 유지합니다.
유니코드 ∩
는 Julia REPL에서 \cap
을 입력한 후 탭을 눌러 입력할 수 있으며, 많은 편집기에서도 가능합니다. 이는 중위 연산자로, s ∩ itr
과 같이 사용할 수 있습니다.
또한 setdiff
, isdisjoint
, issubset
, issetequal
도 참조하십시오.
Julia 1.8부터 intersect는 두 입력의 타입 승격된 eltype의 eltype을 가진 결과를 반환합니다.
예제
julia> intersect([1, 2, 3], [3, 4, 5])
1-element Vector{Int64}:
3
julia> intersect([1, 4, 4, 5, 6], [6, 4, 6, 7, 8])
2-element Vector{Int64}:
4
6
julia> intersect(1:16, 7:99)
7:16
julia> (0, 0.0) ∩ (-0.0, 0)
1-element Vector{Real}:
0
julia> intersect(Set([1, 2]), BitSet([2, 3]), 1.0:10.0)
Set{Float64} with 1 element:
2.0
Base.setdiff
— Functionsetdiff(s, itrs...)
s
에 있는 요소 중 itrs
의 어떤 반복 가능한 객체에도 없는 요소의 집합을 구성합니다. 배열의 순서를 유지합니다.
자세한 내용은 setdiff!
, union
및 intersect
를 참조하세요.
예제
julia> setdiff([1,2,3], [3,4,5])
2-element Vector{Int64}:
1
2
Base.setdiff!
— Functionsetdiff!(s, itrs...)
집합 s
에서 itrs
의 각 iterable의 각 요소를 (제자리에서) 제거합니다. 배열로 순서를 유지합니다.
!!! 경고 어떤 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 될 수 있습니다.
예시
julia> a = Set([1, 3, 4, 5]);
julia> setdiff!(a, 1:2:6);
julia> a
Set{Int64} with 1 element:
4
Base.symdiff
— Functionsymdiff(s, itrs...)
전달된 집합의 요소들 간의 대칭 차집합을 구성합니다. s
가 AbstractSet
이 아닐 경우, 순서가 유지됩니다.
또한 symdiff!
, setdiff
, union
및 intersect
를 참조하세요.
예제
julia> symdiff([1,2,3], [3,4,5], [4,5,6])
3-element Vector{Int64}:
1
2
6
julia> symdiff([1,2,1], [2, 1, 2])
Int64[]
Base.symdiff!
— Functionsymdiff!(s::Union{AbstractSet,AbstractVector}, itrs...)
전달된 집합의 대칭 차를 구성하고 결과로 s
를 덮어씁니다. s
가 배열인 경우 순서가 유지됩니다. 이 경우 요소의 중복성이 중요합니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 때 동작이 예상치 못한 결과를 초래할 수 있습니다.
Base.intersect!
— Functionintersect!(s::Union{AbstractSet,AbstractVector}, itrs...)
전달된 모든 집합을 교차하고 결과로 s
를 덮어씁니다. 배열의 경우 순서를 유지합니다.
!!! 경고 변형된 인수 중 하나가 다른 인수와 메모리를 공유할 때 동작이 예기치 않게 될 수 있습니다.
Base.issubset
— Functionissubset(a, b) -> Bool
⊆(a, b) -> Bool
⊇(b, a) -> Bool
집합 a
의 모든 요소가 집합 b
에도 있는지 확인합니다. in
을 사용하세요.
또한 ⊊
, ⊈
, ∩
, ∪
, contains
도 참조하세요.
예제
julia> issubset([1, 2], [1, 2, 3])
true
julia> [1, 2, 3] ⊆ [1, 2]
false
julia> [1, 2, 3] ⊇ [1, 2]
true
Base.in!
— Functionin!(x, s::AbstractSet) -> Bool
s
에 x
가 있으면 true
를 반환합니다. 그렇지 않으면 x
를 s
에 추가하고 false
를 반환합니다. 이는 in(x, s) ? true : (push!(s, x); false)
와 동등하지만, 더 효율적인 구현이 있을 수 있습니다.
이 함수는 최소 1.11이 필요합니다.
예제
julia> s = Set{Any}([1, 2, 3]); in!(4, s)
false
julia> length(s)
4
julia> in!(0x04, s)
true
julia> s
Set{Any} with 4 elements:
4
2
3
1
Base.:⊈
— Function⊈(a, b) -> Bool
⊉(b, a) -> Bool
⊆
및 ⊇
의 부정, 즉 a
가 b
의 부분집합이 아님을 확인합니다.
자세한 내용은 issubset
(⊆
), ⊊
를 참조하세요.
예제
julia> (1, 2) ⊈ (2, 3)
true
julia> (1, 2) ⊈ (1, 2, 3)
false
Base.:⊊
— Function⊊(a, b) -> Bool
⊋(b, a) -> Bool
a
가 b
의 부분집합이지만 같지 않은지를 결정합니다.
예제
julia> (1, 2) ⊊ (1, 2, 3)
true
julia> (1, 2) ⊊ (1, 2)
false
Base.issetequal
— Functionissetequal(a, b) -> Bool
a
와 b
가 동일한 요소를 가지고 있는지 확인합니다. a ⊆ b && b ⊆ a
와 동등하지만 가능한 경우 더 효율적입니다.
참고: isdisjoint
, union
.
예제
julia> issetequal([1, 2], [1, 2, 3])
false
julia> issetequal([1, 2], [2, 1])
true
issetequal(x)
x
와 issetequal
를 사용하여 인수를 비교하는 함수를 만듭니다. 즉, y -> issetequal(y, x)
와 동등한 함수입니다. 반환된 함수는 Base.Fix2{typeof(issetequal)}
유형이며, 이는 특수화된 메서드를 구현하는 데 사용할 수 있습니다.
이 기능은 최소한 Julia 1.11이 필요합니다.
Base.isdisjoint
— Functionisdisjoint(a, b) -> Bool
컬렉션 a
와 b
가 서로 겹치지 않는지 확인합니다. isempty(a ∩ b)
와 동등하지만 가능한 경우 더 효율적입니다.
참고: intersect
, isempty
, issetequal
.
이 함수는 최소한 Julia 1.5가 필요합니다.
예제
julia> isdisjoint([1, 2], [2, 3, 4])
false
julia> isdisjoint([3, 1], [2, 4])
true
isdisjoint(x)
x
와 isdisjoint
를 사용하여 인수를 비교하는 함수를 만듭니다. 즉, y -> isdisjoint(y, x)
와 동등한 함수입니다. 반환된 함수는 Base.Fix2{typeof(isdisjoint)}
유형이며, 특수화된 메서드를 구현하는 데 사용할 수 있습니다.
이 기능은 최소한 Julia 1.11이 필요합니다.
완전히 구현됨:
부분적으로 구현됨:
Dequeues
Base.push!
— Functionpush!(collection, items...) -> collection
하나 이상의 items
를 collection
에 삽입합니다. collection
이 정렬된 컨테이너인 경우, 항목은 끝에 삽입됩니다(주어진 순서로).
예제
julia> push!([1, 2, 3], 4, 5, 6)
6-element Vector{Int64}:
1
2
3
4
5
6
collection
이 정렬된 경우, append!
를 사용하여 다른 컬렉션의 모든 요소를 추가할 수 있습니다. 앞의 예의 결과는 append!([1, 2, 3], [4, 5, 6])
와 동일합니다. AbstractSet
객체의 경우, 대신 union!
를 사용할 수 있습니다.
성능 모델에 대한 참고 사항은 sizehint!
를 참조하십시오.
또한 pushfirst!
도 참조하십시오.
Base.pop!
— Functionpop!(collection) -> item
collection
에서 항목을 제거하고 반환합니다. collection
이 정렬된 컨테이너인 경우 마지막 항목이 반환되며, 비정렬 컨테이너의 경우 임의의 요소가 반환됩니다.
참고: popfirst!
, popat!
, delete!
, deleteat!
, splice!
, 및 push!
.
예제
julia> A=[1, 2, 3]
3-element Vector{Int64}:
1
2
3
julia> pop!(A)
3
julia> A
2-element Vector{Int64}:
1
2
julia> S = Set([1, 2])
Set{Int64} with 2 elements:
2
1
julia> pop!(S)
2
julia> S
Set{Int64} with 1 element:
1
julia> pop!(Dict(1=>2))
1 => 2
pop!(collection, key[, default])
collection
에 key
가 존재하면 해당 매핑을 삭제하고 반환하고, 그렇지 않으면 default
를 반환하거나 default
가 지정되지 않은 경우 오류를 발생시킵니다.
예제
julia> d = Dict("a"=>1, "b"=>2, "c"=>3);
julia> pop!(d, "a")
1
julia> pop!(d, "d")
ERROR: KeyError: key "d" not found
Stacktrace:
[...]
julia> pop!(d, "e", 4)
4
Base.popat!
— Functionpopat!(a::Vector, i::Integer, [default])
주어진 i
에서 항목을 제거하고 반환합니다. 이후 항목들은 결과적으로 생긴 간격을 채우기 위해 이동됩니다. i
가 a
에 대한 유효한 인덱스가 아닐 경우, default
를 반환하거나 default
가 지정되지 않은 경우 오류를 발생시킵니다.
참고: pop!
, popfirst!
, deleteat!
, splice!
.
이 함수는 Julia 1.5부터 사용할 수 있습니다.
예제
julia> a = [4, 3, 2, 1]; popat!(a, 2)
3
julia> a
3-element Vector{Int64}:
4
2
1
julia> popat!(a, 4, missing)
missing
julia> popat!(a, 4)
ERROR: BoundsError: attempt to access 3-element Vector{Int64} at index [4]
[...]
Base.pushfirst!
— Functionpushfirst!(collection, items...) -> collection
collection
의 시작 부분에 하나 이상의 items
를 삽입합니다.
이 함수는 많은 다른 프로그래밍 언어에서 unshift
라고 불립니다.
예제
julia> pushfirst!([1, 2, 3, 4], 5, 6)
6-element Vector{Int64}:
5
6
1
2
3
4
Base.popfirst!
— Functionpopfirst!(collection) -> item
collection
에서 첫 번째 item
을 제거합니다.
이 함수는 많은 다른 프로그래밍 언어에서 shift
라고 불립니다.
예제
julia> A = [1, 2, 3, 4, 5, 6]
6-element Vector{Int64}:
1
2
3
4
5
6
julia> popfirst!(A)
1
julia> A
5-element Vector{Int64}:
2
3
4
5
6
Base.insert!
— Functioninsert!(a::Vector, index::Integer, item)
주어진 index
에 item
을 a
에 삽입합니다. index
는 결과적으로 a
에서 item
의 인덱스입니다.
참고: push!
, replace
, popat!
, splice!
.
예제
julia> insert!(Any[1:6;], 3, "here")
7-element Vector{Any}:
1
2
"here"
3
4
5
6
Base.deleteat!
— Functiondeleteat!(a::Vector, i::Integer)
주어진 i
에서 항목을 제거하고 수정된 a
를 반환합니다. 이후 항목들은 결과적으로 생긴 간격을 메우기 위해 이동됩니다.
참고: keepat!
, delete!
, popat!
, splice!
.
예제
julia> deleteat!([6, 5, 4, 3, 2, 1], 2)
5-element Vector{Int64}:
6
4
3
2
1
deleteat!(a::Vector, inds)
주어진 inds
에 의해 인덱스에서 항목을 제거하고 수정된 a
를 반환합니다. 이후 항목들은 결과적으로 생긴 간격을 채우기 위해 이동됩니다.
inds
는 반복자이거나 정렬되고 고유한 정수 인덱스의 컬렉션, 또는 a
와 동일한 길이의 부울 벡터일 수 있으며, true
는 삭제할 항목을 나타냅니다.
예제
julia> deleteat!([6, 5, 4, 3, 2, 1], 1:2:5)
3-element Vector{Int64}:
5
3
1
julia> deleteat!([6, 5, 4, 3, 2, 1], [true, false, true, false, true, false])
3-element Vector{Int64}:
5
3
1
julia> deleteat!([6, 5, 4, 3, 2, 1], (2, 2))
ERROR: ArgumentError: indices must be unique and sorted
Stacktrace:
[...]
Base.keepat!
— Functionkeepat!(a::Vector, inds)
keepat!(a::BitVector, inds)
주어진 inds
에 의해 제공되지 않은 모든 인덱스의 항목을 제거하고 수정된 a
를 반환합니다. 유지된 항목은 결과적으로 생긴 간격을 채우기 위해 이동됩니다.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 동작이 예기치 않게 나타날 수 있습니다.
inds
는 정렬되고 고유한 정수 인덱스의 반복자여야 합니다. deleteat!
도 참조하십시오.
!!! 호환성 "Julia 1.7" 이 함수는 Julia 1.7부터 사용할 수 있습니다.
예제
julia> keepat!([6, 5, 4, 3, 2, 1], 1:2:5)
3-element Vector{Int64}:
6
4
2
keepat!(a::Vector, m::AbstractVector{Bool})
keepat!(a::BitVector, m::AbstractVector{Bool})
논리 인덱싱의 제자리 버전 a = a[m]
. 즉, 길이가 같은 벡터 a
와 m
에 대해 keepat!(a, m)
을 사용하면, 해당 인덱스에서 m
이 false
인 a
의 모든 요소가 제거됩니다.
예제
julia> a = [:a, :b, :c];
julia> keepat!(a, [true, false, true])
2-element Vector{Symbol}:
:a
:c
julia> a
2-element Vector{Symbol}:
:a
:c
Base.splice!
— Functionsplice!(a::Vector, index::Integer, [replacement]) -> item
주어진 인덱스에서 항목을 제거하고 제거된 항목을 반환합니다. 이후 항목들은 남은 간격을 채우기 위해 왼쪽으로 이동합니다. 지정된 경우, 정렬된 컬렉션의 대체 값이 제거된 항목 대신에 삽입됩니다.
참고: replace
, delete!
, deleteat!
, pop!
, popat!
.
예제
julia> A = [6, 5, 4, 3, 2, 1]; splice!(A, 5)
2
julia> A
5-element Vector{Int64}:
6
5
4
3
1
julia> splice!(A, 5, -1)
1
julia> A
5-element Vector{Int64}:
6
5
4
3
-1
julia> splice!(A, 1, [-1, -2, -3])
6
julia> A
7-element Vector{Int64}:
-1
-2
-3
5
4
3
-1
항목을 제거하지 않고 인덱스 n
앞에 replacement
를 삽입하려면 splice!(collection, n:n-1, replacement)
를 사용하세요.
splice!(a::Vector, indices, [replacement]) -> items
지정된 인덱스에서 항목을 제거하고, 제거된 항목을 포함하는 컬렉션을 반환합니다. 이후 항목은 남은 간격을 채우기 위해 왼쪽으로 이동합니다. 지정된 경우, 정렬된 컬렉션의 대체 값이 제거된 항목 대신 삽입됩니다. 이 경우, indices
는 AbstractUnitRange
여야 합니다.
인덱스 n
앞에 항목을 제거하지 않고 replacement
를 삽입하려면 splice!(collection, n:n-1, replacement)
를 사용하십시오.
!!! 경고 변형된 인수가 다른 인수와 메모리를 공유할 경우 동작이 예기치 않게 될 수 있습니다.
!!! 호환성 "Julia 1.5" Julia 1.5 이전에는 indices
가 항상 UnitRange
여야 했습니다.
!!! 호환성 "Julia 1.8" Julia 1.8 이전에는 대체 값을 삽입할 경우 indices
가 UnitRange
여야 했습니다.
예제
julia> A = [-1, -2, -3, 5, 4, 3, -1]; splice!(A, 4:3, 2)
Int64[]
julia> A
8-element Vector{Int64}:
-1
-2
-3
2
5
4
3
-1
Base.resize!
— Functionresize!(a::Vector, n::Integer) -> Vector
a
를 n
요소를 포함하도록 크기를 조정합니다. n
이 현재 컬렉션 길이보다 작으면 처음 n
요소가 유지됩니다. n
이 더 크면 새로운 요소가 초기화될 것이라고 보장되지 않습니다.
예제
julia> resize!([6, 5, 4, 3, 2, 1], 3)
3-element Vector{Int64}:
6
5
4
julia> a = resize!([6, 5, 4, 3, 2, 1], 8);
julia> length(a)
8
julia> a[1:6]
6-element Vector{Int64}:
6
5
4
3
2
1
Base.append!
— Functionappend!(collection, collections...) -> collection.
정렬된 컨테이너 collection
에 각 collections
의 요소를 끝에 추가합니다.
여러 개의 컬렉션을 추가하려면 최소한 Julia 1.6이 필요합니다.
예제
julia> append!([1], [2, 3])
3-element Vector{Int64}:
1
2
3
julia> append!([1, 2, 3], [4, 5], [6])
6-element Vector{Int64}:
1
2
3
4
5
6
개별 항목을 collection
에 추가하려면 push!
를 사용하세요. 이 항목들은 다른 컬렉션에 이미 포함되어 있지 않아야 합니다. 앞선 예제의 결과는 push!([1, 2, 3], 4, 5, 6)
와 동일합니다.
성능 모델에 대한 참고 사항은 sizehint!
를 참조하세요.
벡터에 대해서는 vcat
, 집합에 대해서는 union!
, 반대 순서에 대해서는 prepend!
및 pushfirst!
를 참조하세요.
Base.prepend!
— Functionprepend!(a::Vector, collections...) -> collection
각 collections
의 요소를 a
의 시작 부분에 삽입합니다.
collections
가 여러 개의 컬렉션을 지정할 경우, 순서가 유지됩니다: collections[1]
의 요소가 a
의 가장 왼쪽에 나타나고, 그 다음으로 이어집니다.
여러 개의 컬렉션을 prepend하기 위해서는 최소한 Julia 1.6이 필요합니다.
예제
julia> prepend!([3], [1, 2])
3-element Vector{Int64}:
1
2
3
julia> prepend!([6], [1, 2], [3, 4, 5])
6-element Vector{Int64}:
1
2
3
4
5
6
완전히 구현됨:
Utility Collections
Core.Pair
— TypePair(x, y)
x => y
Pair
객체를 Pair{typeof(x), typeof(y)}
타입으로 생성합니다. 요소는 first
와 second
필드에 저장됩니다. 또한 반복을 통해 접근할 수 있습니다(하지만 Pair
는 브로드캐스팅 작업에 대해 단일 "스칼라"로 취급됩니다).
자세한 내용은 Dict
를 참조하세요.
예제
julia> p = "foo" => 7
"foo" => 7
julia> typeof(p)
Pair{String, Int64}
julia> p.first
"foo"
julia> for x in p
println(x)
end
foo
7
julia> replace.(["xops", "oxps"], "x" => "o")
2-element Vector{String}:
"oops"
"oops"
Base.Pairs
— TypeBase.Pairs(values, keys) <: AbstractDict{eltype(keys), eltype(values)}
인덱스 가능한 컨테이너를 동일한 데이터의 사전 뷰로 변환합니다. 기본 데이터의 키 공간을 수정하면 이 객체가 무효화될 수 있습니다.