Julia Language
理解
サーチ…
配列の理解
基本的な構文
Juliaの配列の解説では、次の構文を使用します。
[expression for element = iterable]
for
ループと同様に、 =
、 in
、および∈
すべてが理解のために受け入れられることに注意してください。
これは、空の配列を作成し、 for
ループを使用してpush!
するのとほぼ同じpush!
それへのアイテム。
result = []
for element in iterable
push!(result, expression)
end
しかし、配列の理解のタイプは可能な限り狭く、パフォーマンスにとっては優れています。
たとえば、 1
から10
整数の2乗の配列を取得するには、次のコードを使用します。
squares = [x^2 for x=1:10]
これは、-loop版の方が長くfor
もクリーンで簡潔な置き換えです。
squares = []
for x in 1:10
push!(squares, x^2)
end
条件付き配列理解
Julia 0.5の前に、配列内包表記の中で条件を使用する方法はありません。しかし、それはもはや真実ではありません。 Julia 0.5では、次のような条件で条件を使用できます。
julia> [x^2 for x in 0:9 if x > 5]
4-element Array{Int64,1}:
36
49
64
81
上の例のソースはここにあります 。
ネストされたリストの理解を使用したい場合:
julia>[(x,y) for x=1:5 , y=3:6 if y>4 && x>3 ]
4-element Array{Tuple{Int64,Int64},1}:
(4,5)
(5,5)
(4,6)
(5,6)
多次元配列の解説
ネストされたfor
ループを使用して、多数の固有のiterableを反復することができます。
result = []
for a = iterable_a
for b = iterable_b
push!(result, expression)
end
end
同様に、複数の反復仕様を配列理解に供給することができる。
[expression for a = iterable_a, b = iterable_b]
例えば、 1:3
および1:2
のデカルト積を生成するために、以下を使用することができる。
julia> [(x, y) for x = 1:3, y = 1:2]
3×2 Array{Tuple{Int64,Int64},2}:
(1,1) (1,2)
(2,1) (2,2)
(3,1) (3,2)
フラット化された多次元配列内包表記は、形が失われることを除いて同様です。例えば、
julia> [(x, y) for x = 1:3 for y = 1:2]
6-element Array{Tuple{Int64,Int64},1}:
(1, 1)
(1, 2)
(2, 1)
(2, 2)
(3, 1)
(3, 2)
上記の平坦化された変形です。構文上の違いは、カンマの代わりにfor
が追加さfor
ていることです。
ジェネレータの理解
ジェネレータの解説は、配列の解説と同様の書式に従いますが、角括弧[]
かわりにかっこ()
使用します。
(expression for element = iterable)
このような式はGenerator
オブジェクトを返します。
julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)
関数の引数
追加の括弧のセットを必要とせずに、関数への唯一の引数としてジェネレータの解説を提供することができます。
julia> join(x^2 for x = 1:5)
"1491625"
しかし、複数の議論が提供された場合、生成者の理解度はそれ自身の括弧の組を必要とする。
julia> join(x^2 for x = 1:5, ", ")
ERROR: syntax: invalid iteration specification
julia> join((x^2 for x = 1:5), ", ")
"1, 4, 9, 16, 25"