scala学習第二章関数

2922 ワード

いちへんちょうパラメータかんすう
次のように、可変長パラメータリスト関数を実装します.
    
def sum(args:Int*) = {
   var result =0
    for(arg<- args)
         result +=arg
     result
   }

関数はSeqのタイプのパラメータを得たが,Seqに直接伝達することはできなかった.例えば次のような書き方は間違っています
var s = sum(1 to 5)

この問題を解決する方法は、コンパイラにこのパラメータがパラメータシーケンスとして処理されることを望んでいることを伝えることです.追加:*,たとえば
var s =sum(1 to 5:_*)

にプロセス
Scalaは値を返さない関数に対して特別な表現がある.関数体がカッコに含まれているが、前の等号=がない場合、戻りタイプはUnitです.このような関数はプロセス(procedure)と呼ばれ,値を返さないため等号を省略することができる.
トリプルグループ
3.1長さ不変の配列
長さが変わらない配列が必要な場合は、ScalaのArrayを使用します.
  
val nums = new Array[Int](10)     //   10     ,        0
val s =Array("Hello","Array")         //       ,    new

3.2変長配列:配列バッファ
その長さが必要に応じて変化する配列に対してjavaにはArrayListがあり、Scalaの等価データ構造はArrayBufferである.
   
空のバッファで、データを格納する準備ができています.
 val b = ArrayBuffer[Int]() //   new  ArrayBuffer[Int]
+=で末尾に要素を追加
 b+=1  //ArrayBuffer(1)
末尾に複数の要素を追加し、かっこで囲む
  b+=(1,2,35)     //ArrayBuffer(1,1,2,3,5)
エンドエレメントの除去
 b.trimEnd(5)   //ArrayBuffer(1,1,2,5)
バッファ配列の末尾に要素を追加または削除するのは効率的ですが、任意の場所で要素を挿入または削除するのは効率的ではありません.その後のすべての要素は平行移動する必要があるからです.例:
b.insert(2,6)
Arrayを構築する必要がある場合がありますが、最終的にどれだけの要素をインストールする必要があるか分かりません.この場合、まず配列バッファを構築し、呼び出します.
   b.toArray
逆に、a.toBufferを呼び出すと、1つの配列aを1つの配列バッファに変換することができる
3.3配列および配列バッファの遍歴
次はforループループ配列またはバッファ配列の構文です.
    
for(i< -0  until a.length)
     println(i+","+a(i))

変数iの値は0からa.length-1までです.0 until 10は実際には0を呼び出す.until(10)
2つの要素ごとにジャンプしたい場合は、iをこのように遍歴させることができます.
0 until  (a.length,2)
配列の末尾から始めたい場合は、遍歴の書き方は以下の通りです.
 (0 until a.length).reverse
配列に配列の下付き文字を使用する必要がない場合は、配列に次のようにアクセスできます.
for (elem<-a )   printf(elem)

3.4常用アルゴリズム
Scala組み込み関数.
えんざんかんすう
 Array(10,13,-9).sum   // ArrayBuffer    
ArrayBuffer("Mary","had","little").max    //little
sortedメソッドは、配列または配列バッファをソートし、ソート後の配列または配列バッファを返しますが、元のバージョンは変更されません.
val b = ArrayBuffer(1,7,2,9)
val bSorted = b.sorted(_<_)   //b    

3.5多次元配列
 
例えば、Doubleの2次元配列タイプはArray[Array[Double]]である.このような配列を構築するにはofDimメソッドを使用します.
    
val matrix =  Array.ofDim[Double](3,4)   //  ,  

要素にアクセスするには、2対のカッコを使用します.
  matrix(row)(column) = 42