パス操作を学習の大規模なデータセットを共有するのが良いプログラマは、Scalaのシリーズを機能します

良いプログラマは皆のための集合演算機能のScalaのシリーズを学習大きなデータラインを共有し続ける
4.6の重要な機能の集合
4.6.1sum /最大/最小/カウント
最大値を見つけるか、次のように最小値は、シーケンスでは非常に一般的な要件です:
ヴァルに数字をSEQ =(11、2、。5 ,. 1 ,. 6 ,. 3 ,. 9)
numbers.max // 11。
numbers.min 1つの//。
より高度な例では、シーケンス含まブック
ケースクラスブック(タイトル:文字列、ページ。 int型)
ヴァルブックス=配列(ブック( "Scalaの開発者の未来"、85)、
書籍( "並列アルゴリズム"、240)、
書籍( "オブジェクト指向プログラミング"、130)、
書籍( "モバイル開発"、495))
本//(モバイル開発、495)
books.maxBy(=> book.pages書籍)
//ブック(将来のScalaの開発、85)
books.minBy(=> book.pagesブック)
上に示され、minBy&maxBy方法複雑なデータの問題を解決します。あなたは、単に最大または最小の属性判定データを選択します。
4.6.2フィルター
のみ奇数の要素を取得するデジタルフィルタリスト。
番号SEQ =ヴァル(1,2,3,4,5,6,7,8,9,10)numbers.filter(N - => N-%2 == 0)
ヴァルブックス=配列(書籍のScalaの(「未来開発"85)、
書籍("並列アルゴリズム"240)、
予約("オブジェクト指向プログラミング"130)、
予約("モバイル開発」、495))
books.filter(予約=> book.pages> = 120 )
4.6.3平坦化
ヴァルABCD SEQ =( 'A'、 'B'、 'C'、 'D')
ヴァルefgj SEQ =( 'E'、 'F'、 'G'、 'H')
ヴァル= IJKL配列( 'I'、 'J'、 'K'、 'L')
ヴァルMNOP =配列( 'M'、 'N-'、 'O'、 'P')
のVal QRST =配列( 'Q'、「R&LT '' S'、 'T '




リスト//(A、B、C、D、E、F、G、H、I、J、K、L、M、N - 、O、P、Qは、R、S、T、
// U、V、 W、X、Y、Z)
alphabet.flatten
がコレクションのコレクションである、とあなたが操作したときに、これらの要素のすべてを設定したい場合には、平坦化に使用されます。
4.6.4操作のセットとの間の
差、交差点と組合
ヴァルNUM1 SEQ =(1,2 ,. 3 ,. 4 ,. 5 ,. 6)
ヴァルNUM2 SEQ =(4 ,. 5 ,. 6 ,. 7 ,. 8 ,. 9)
/ /リスト(1,2 ,. 3)
num1.diff(NUM2)
//リスト(4 ,. 5 ,. 6)
num1.intersect(NUM2)
//リスト(1,2 ,. 3 ,. 4 ,. 5 ,. 6 ,. 4 ,. 5 、6 ,. 7 ,. 8 ,. 9)
num1.union(NUM2)
例えばユニオン以上が重複する要素を保持していました。私たちは何をする方法を繰り返す必要はありませんか?次に、異なる機能を使用することができる
(1、2、。3 ,. 4 ,. 5 ,. 6 ,. 7 ,. 8 ,. 9)//リスト
num1.union(NUM2).distinct
:以下は、上記の機能の説明図である
パス操作を学習の大規模なデータセットを共有するのが良いプログラマは、Scalaのシリーズを機能します
4.6.5マップ(マッピング)リスト要素
マップScalaは最も一般的に使用される関数の集まりです。これは非常に強力です:
ヴァル番号=配列(1,2,3,4,5,6)
リスト//(2 ,. 4 ,. 6 ,. 8、10、12である)
numbers.map(N - => * N-2)
ヴァルは、SEQ =( 'A'、 'B'、 'C'、 'D')を文字
//リスト(、B、C、D)
chars.map(CH => ch.toUpper)
論理マップ機能セットと、呼び出し元の関数の各要素に要素をトラバースすることです。
FlatMap 4.6.6
:以下の組成のこれらの二つの機能によってflatMap
地図と平ら
例:
ヴァルABCD配列は=( 'A'、 'B'、 'C'、 'D')
//リスト(A、A、B 、B、C、C、D、D)
abcd.flatMap(CH =>リスト(ch.toUpper、CH))
条件のセット全体を検査するため4.6.7

  1. ヴァル番号= SEQ(3、7、2、9、6、5、1、4、2)
  2. //トゥーレのnumbers.forall(N => N <10)
  3. //偽numbers.forall(N => N > 5)
    及び機能FORALL作成そのような要求に対処することです。
    パケットの4.6.8収集
    偶数および奇数セットにそのような分割のセットのコレクションとしては、パーティション機能は、私たちは、これを行うのを助けることができる:
    。ヴァル配列番号=(3 ,. 7,2 ,. 9 ,. 6 ,. 5 ,. 1、 。4、2)
    //(一覧(2 ,. 6 ,. 4、2)、リスト)(3 ,. 7 ,. 9 ,. 5 ,. 1)
    numbers.partition(N - => N-%2 == 0)
    4.6.9つ折り
    他の人気の高い操作が倍で、一般的にfoldLeftとfoldRight考えることができます。彼らは、さまざまな側面から同じ作業をしている:
    (1、2、。3 ,. 4 ,. 5)ヴァル配列番号=
    // 15 numbers.foldLeft(0)((RES、N-)=> + N-RES)
    ヴァルワード= SEQ( "アップル"、 "犬"、 "表")
    // 13はwords.foldLeft(0)((ResultLength、ワード)=> + ResultLength word.length)で
    foldLeft、reduceRight、及びfoldRightの
    方法はreduceLeftと協力してfoldLeft方法象は、それはあなたが最初の要素として値を指定することができます。
    スカラ>ヴァルA =配列(1 、2、3)
    A:配列[INT] =配列(1、2、3)

スカラ> a.reduceLeft(+
RES6ます。int = 6

スカラ> a.foldLeft(100)(+
res7ます。int = 106

スカラ> a.foldLeft(200)(+
res8ます。int = 206

おすすめ

転載: blog.51cto.com/14479068/2437113