サーチ…


配列の理解

基本的な構文

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"


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow