一、配列、配列バッファ
1、配列
、意味Javaはスカラで配列だけでなく、不変配列の長さを表していました。
また、スカラおよびJavaは、JVMで実行されているのために、当事者は、お互いを呼び出すことができ、したがって、下にあるScalaの配列は、実際のJavaの配列です。例えば、文字列配列は、JavaのString []の下にある、
整数の配列は、INT [] JAVAの底部にあります。
アレイが初期化された後、長さが最大に固定されており、すべての要素そのタイプ初期化子によれば、
ヴァルA =新たな新しい配列[INT](10)
ヴァルA =新たな新しい配列[文字列](10)
に直接(アレイを用いてアレイを作成する)、要素入力自動的に推論:
ヴァルAは、Array( "こんにちは"、 "世界")=
A(0)= "こんにちは"
######
スカラ座>新しい新しいヴァルAは、アレイ[INT](10)=
アレイ[INT]:Aをアレイ=(0、0、0、0、0、0、0、0、0、0)
。()の要素にアクセスするためのスカラ> A(0)= 1 #scala
スカラ>
res57:配列[int]はアレイ(= 。1、0、0、0、0、0、0、0、0、0)
スカラ> A(1)。
res58ます。int = 0
######
スカラ>新しい新しいヴァルAは配列[文字列](10)=
A:配列[文字列] =配列(NULL、NULL、NULL、NULL、NULL、NULL、NULL、NULL、NULL、NULL)
スカラ>(1)
res60:文字列= NULL
スカラ>(1)= "レオ"
スカラ>(1)
res62:文字列=レオ
######
スカラ>ヴァルA =配列( "こんにちは"、 "言葉")
:配列[文字列] =配列(こんにちは、単語)
スカラ>
res63。アレイ[文字列] =配列(こんにちは、ワード)
のScala>(0)= "こんにちは"
スカラ>
res66:配列[文字列] =配列(やあ、単語)
######
スカラ>ヴァルA =配列( "レオ"、30)
:配列[任意] =配列(LEO、30)#自动类型推断
スカラ> a.length
res67:のInt = 2
2、配列バッファ
スカラ座では、このような可変長のArrayListコレクションクラスで必要な場合は、Javaに似た、あなたはArrayBufferを使用することができます。
あなたがするたびに完全修飾名を使用しない場合は、//、事前ArrayBufferクラスで導入することができる
輸入scala.collection.mutable.ArrayBufferの
仕方//作成することができます)ArrayBuferを(使用、空のArrayBuffer
ヴァルArrayBuffertlnty B =()
使用して// + =演算子、要素が追加、または要素の複数のことができる
のB + 1 =
B + =(2,3,4,5)
/ + =演算子の使用、すべての要素が別のコレクションに追加することができる
++ =配列B (6,7,8,9,10)
// TrimEnd()関数を使用して、要素が指定された数の尾から遮断することができる
b.trimEnd(5)
######
スカラ>インポートscala.collection.mutable.ArrayBuffer
scala.collection.mutable.ArrayBufferインポート
スカラ> B =ヴァルArrayBuffer [INT]()
B:scala.collection.mutable.ArrayBufferの[int]はArrayBuffer()=
。スカラ> = B + #scala特定の構文を1、配列に加え要素
res68:ArrayBufferのb.type =(1)
スカラ> + B =(2,3,4,5)
res69:ArrayBufferのb.type =(1,2 ,. 3 ,. 4 ,. 5)
スカラ> B ++ =配列( 6,7,8,9,10)
res70:ArrayBufferのb.type =(1,2 ,. 3 ,. 4 ,. 5 ,. 6 ,. 7 ,. 8 ,. 9、10)。
スカラ> b.trimEnd(5)。
スカラ> Bの
res72 :scala.collection.mutable.ArrayBuffer [INT] ArrayBuffer =(1,2 ,. 3 ,. 4 ,. 5)
######
/使用インサート()関数は、指定された位置で要素に挿入することができる;
/業務効率が、これは位置指定されたすべての要素を移動させる必要があるため、低
b.insert(5,6)
b.insert(6,7,8,9,10)
()関数を削除使用は/位置にある要素を削除することができ
(b.remove 1)
b.remove(1,3)
ArrayBufferの間変換アレイと//
b.toArray
a.toBuffer
######
スカラ> B
res73:scala.collection.mutable.ArrayBuffer [INT] = ArrayBuffer(1、2、3、4、5)
スカラ> b.insert(5,6)
スカラ> B
res75:scala.collection.mutable.ArrayBuffer [INT] = ArrayBuffer(1、2、3、4、5、6)
スカラ> b.insert
インサートinsertAll
スカラ> b.insert(6,7,8,9,10)
スカラ> B
res77:scala.collection.mutable.ArrayBuffer [INT] = ArrayBuffer(1、2、3、4、5、6、7、8、9、10)
スカラ> b.remove(1)
res78:のInt = 2
スカラ> B
res79:scala.collection.mutable。 ArrayBuffer [INT] = ArrayBuffer(1、3、4、5、6、7、8、9、10)
スカラ> b.remove(1,3)
スカラ> B
res81:scala.collection.mutable.ArrayBuffer [INT] = ArrayBuffer(1、6、7、8、9、10)
スカラ>変数のbArray = b.toArray
bArray:配列[INT] =配列(1、6、7、8、9、10)
スカラ> VAR aArrayBuffer = a.toBuffer
aArrayBuffer:scala.collection.mutable.Buffer [任意] = ArrayBuffer(LEO、30)
3、遍历アレイArrayBuffer
// forループを使用するまで反復して配列/ ArrayBufer / Richlntが機能するまでに設けられている (私は< -0 てb.lengthするまで) 印刷(B(I))を //ジャンプがアレイ/ ArrayBufferを横断する (Iは<ため- 0まで(のb.lengthに、2)) 印刷(B(I) //配列/ ArrayBufferを横断尾の ために(私は< - (0までのb.lengthする).reverse) 印刷(BI)) / "拡張forループ"を使用アレイ/ ArrayBuffer横断 - <(B E)のための 印刷(E) ###### スカラ>を(私は< - までのb.length 0)のprintln(B(I)) 。1 6。 7。 8。 9。 10 Scalaは>のため(私は< -0(てb.length、2))までのprintln(B(i))を# ステップを指定して 1。 7。 9。 スカラ>(私は< - (0までのb.lengthする).reverse)のprintln(B(I))#トランススイッチ 10 。9 。8 。7 。6 。1 Scalaは>(Eため< - のため#補強のprintln(E)B) 1。 6。 7。 8。 9。 10
図4に示すように、一般的な操作のアレイ
/配列要素を加算 ヴァルAは=配列(1,2,3,4,5) ヴァル= SUMのa.sum /最大値取得アレイ ヴァル最大= a.max /ソートアレイ scala.util.Sorting.quickSort( A) 取得する配列のすべての要素の/コンテンツ a.mkString a.mkString( " ")#を指定デリミタ a.mkString(" < "、 " "" > ") // ToString関数 a.toString b.toStringを
第二に、配列が変換され、
図1に示すように、変換収率および機能プログラミング・アレイを使用
変換の//配列、または取得された配列 のValアレイA =(1,2,3,4,5) A2 =(ELEためヴァル< - 収率ELE ELE * A) 変換するArayBuffer @、または取得ArrayBuffer ヴァルBはArrayBuffer [IN]()= B + =(1,2,3,4,5) のValをB2 =(ELE用<-b)収率ELE ELE * /ガードが結合する場合、変換に必要な要素だけ ヴァルA3 =(ELE用< - ELE%2 IF == 0)* ELE ELE収率 関数型プログラミングを使用し/変換アレイ(通常は第一の実施形態) a.filter(_%2 == 0).MAP(2 * _ ) a.filter {_%2 == 0} *地図_ {2} ## Scalaの収量 のために、ループの各反復のために、収率が記憶される値を生成します。あなたが見ることができないと同じように、バッファはバッファに別の新しい値を追加しますループの反復ごとに、そこにあります。 場合は、実行のループ終了のために、それはすべてのコレクションが割り当てられているが返されます。生成された反復型セットの同じ型を返すので、マップマップを生成し、一覧リストが生成され、などされます。 また、元のコレクションが変更されていないことに注意してください。あなたの指定されたアルゴリズムに基づいて新しいコレクションを作成するための/利回り構造。 ###### スカラ> インポートscala.collection.mutable.ArrayBuffer インポートscala.collection.mutable.ArrayBuffer スカラ> B =ヴァルArrayBuffer [INT]() B:scala.collection.mutable.ArrayBuffer [int]は(ArrayBufferを= ) スカラ> + B =(1,2,3,4,5) RES1:ArrayBufferのb.type =(1,2 ,. 3 ,. 4 ,. 5) B2 =(ELEのためのScala>ヴァル< - B)収量ELE * ELEの B2:scala.collection.mutable.ArrayBuffer [int]はArrayBufferを=(1、。4 ,. 9、16、25) スカラ>ヴァルA3 =(ELE用< - 2%IF ELE== 0)ELE * ELE #yield収率 配列[INT]:A3 =アレイ(4、16) スカラ> a.filter(_%2 == 0).MAP(_ * 2)#1 RES2:アレイの[int]を=配列(4,8) スカラ> a.filter {_%2 == 0}マップ{_ * 2} RES3:配列[INT] =配列(4,8)
図2に示すように、アルゴリズムケース
最初の負の数の後に、すべての負を削除します。
/建設アレイ ヴァルAはArrayBuffer [INTY()= A + =(1,2,3,4,5、-1、-3、-5、-9) こと、/第1の負の各々の後に見つかった負除去、パフォーマンスの低下、複数のモバイル・アレイのための VAR偽へ= foundFirstNegative するvarにarrayLength = a.lengthの = 0 VAR指数 一方(インデックス< にarrayLength ){ IF((インデックス)> = 0){ インデックス= 1 + }さもなければ{ IF(!foundFirstNegative)= trueに{foundFirstNegative;} 1 =指数+。 他{a.remove(インデックス)。にarrayLength - 1} = } } ############