Scalaベース--3.配列、マッピング、メタグループ、コレクション

50489 ワード

3配列、マッピング、メタグループ、コレクション
3.1配列
3.1.1定長配列と変長配列
 (1)定長配列定義フォーマット:val arr=new Array[T](配列長)またはval arr=Array[T](要素...) (2)変長配列定義フォーマット:val arr=ArrayBuffer[T]()collection.mutable.ArrayBuffer
//         ,new            ,         apply  ,         ,   0
val arr1 = new Array[Int](8)
//        ,      hashcode 
println(arr1)
//          ,             ,toBuffer           
println(arr1.toBuffer)

//         ,     
//    new,     ,      1   ,  10
val arr2 = Array[Int](10)
println(arr2.toBuffer)

//       3     
val arr3 = Array[String]("Hello", "World", "Scala")
//            
println(arr3(1))

/********************     *****************************/

//    (    )
//         ,    import scala.collection.mutable.ArrayBuffer 
val array4 = ArrayBuffer[Int]()
//+=              
array4 += 1
println(array4)

//        
array4 += (2, 3, 4, 5)
println(array4)

//      ,             ++=
array4 ++= Array(6, 7)
println(array4)

//        ,   ++=
array4 ++= ArrayBuffer(8, 9)
println(array4)

array4.insert(0, -1, 0)
println(array4)

//              remove
//  9         
array4.remove(9, 2)
println(array4)

3.1.2配列の遍歴
val array5 = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
//  for  
for (i <- array5) print(i + ",")
println()

//until    
for (i <- (0 until array5.length)) print(array5(i) + ",")
println()

3.1.3配列変換
//           10        ,yield                   
val res = for (i <- array5) yield i * 10
println(res.toBuffer)

//          +10        , for  if  
val res1 = for(i <- array5 if i % 2 == 0) yield i * 10
println(res1.toBuffer)

//      ,filter  ,        boolean   
//_            
//map                ,        
val res2 = array5.filter(_ % 2 == 0).map(_ * 10)
println(res2.toBuffer)

3.1.4配列共通アルゴリズム
//  
println(array5.sum)
//    
println(array5.max)
//    ,  
println(array5.sorted.toBuffer)
//    ,  
println(array5.sorted.reverse.toBuffer)

3.2マッピング
3.2.1マッピングの宣言
// Scala ,   Map,   immutable   Map, Map       ;    mutable   Map, Map      
//(1)    Map   import scala.collection.immutable._
//   map      ,   
val map1 = Map("zhangsan" -> 18, "lisi" -> 20)
println(map1)

//  map      ,   
val map2 = Map(("zhangsan", 20), ("lisi", 18))
println(map2)
//              val           (   java  final),
//               ,            ,               

//(2)   Map  import scala.collection.mutable._
val user = HashMap("zhangsan" -> 20, "lisi" -> 18)
println(user)

3.2.2可変マッピングの操作
//     Map   ,  key  map value
println(map2("zhangsan"))
println(map2.get("lisi"))
println(map2.get("lisi").get)

//  map    key,    ,    map.getOrElse(key, defalut)
//println(map2("wangwu"))
println(map2.getOrElse("wangwu", "null"))

//  map  
//   :     key
val keys: Iterable[String] = map2.keys
println(keys)
for(i <- keys) println(i + "-->" + map2(i))
println()

//   :     key
val set: Set[String] = map2.keySet
println(set)
for(i <- set) println(i + "-->" + map2(i))
println()

//    
for((i, j) <- map2) println(i + "-->" + j)
println()

//      
map2.foreach{
    case (x, y) => println(x + "-->" + y)
}

3.2.3可変マッピングの操作
//     
user += ("wangwu" -> 19)
println(user)

//       
user += (("zhaoliu", 22), "tianqi" -> 23)
println(user)

//     
user("zhangsan") = 15
println(user)

//       
user += ("zhangsan" -> 33, "lisi" -> 40)
user.put("wangwu", 40)
println(user)

//  key
user -= ("zhangsan")
user.remove("lisi")
println(user)

3.3メタグループ
3.3.1メタグループの作成
  *    K/V     ,           ,              
  *1)            ;         。
  *2)                  ,     
  *       :val tuple=(  ,  ...)
  */
val t = ("hadoop", "storm", "spark")
println(t)

val t1 = ("hadoop", 3.14, 10, true)
println(t1)

3.3.2メタグループの値の取得
/**
  * (1)          :
  *          ,   t._1  t._2  t._3
  *   :          1   
  */
println(t1._3)

3.3.3対偶ユニットの回転集合
/**
  *            :
  *    toMap  
  */
val t2 = Array(("tom", 20), ("jerry", 18))
println(t2.toMap)

3.3.4ファスナー操作
/**
  *     
  * 1.  zip             
  *                   ,                          
  * 2.              ,    zipAll        
  */
val t3 = Array("tom", "jerry", "hello")
val t4 = Array(18, 19)
println(t3.zip(t4).toList)

//   wangwu   , hello     20
println(t3.zipAll(t4, "wangwu", 20).toList)

3.4集合
  Scalaの集合には3種類ある:シーケンスSeq,Set,マッピングMap,すべての集合はIterable特質から拡張され,Scalaには可変(mutable)と可変(immutable)の2種類が集合しており,immutableタイプの集合は初期化後は変更できない(val修飾の変数と区別することに注意)
 Scala       (Nil     ),     head      tail  
list      :
+: (elem: A): List[A]             
:: (x: A): List[A]                 
:+ (elem: A): List[A]             
++[B](that: GenTraversableOnce[B]): List[B]               
::: (prefix: List[A]): List[A]               

3.4.1 List
  (1)可変シーケンスimport scala.collection.immutable._
(2)//          
val list1 = List(1,2,3)
//     list  
val list2 = 2 :: Nil
println("list2: " + list2)
//          ,head  
val first = list1.head
println("first: " + first)
//  tail  
val tail = list1.tail
println("tail: " + tail)
//        
val mid = list1(1)
println("mid: " + mid)

//   List        ,     head       ,   tail    Nil;
println(list2.head + "-->" + list2.tail)

// 0   list1         List
val list3 = 0 :: list1
println("list3: " + list3)
println("list3: " + list1.+:(0))
val list4 = 0 +: list1
println("list4: " + list4)
println("list4: " + list1.+:(0))

//        lst1           
val list5 = list1 :+ 0
println("list5: " + list5)
println("list5: " + list1.:+(0))

// 2 list       List
val list6 = List(4,5,6)
println(list1 ++ list6)
println(list1.++(list6))

// list6   list1          
println(list6 ++ list1)
println(list1.:::(list6))

  (2)可変シーケンスimport scala.collection.mutable._
(3)//        ,   3   1,2,3
val blist = ListBuffer[Int](1,2,3)
//          
val blist1 = new ListBuffer[Int]

// lst1     ,  :        
blist1 += 4
blist1.append(5)
blist1.+=(6)
println("blist: " + blist)
println("blist1: " + blist1)

// blist1       blist ,   :        
blist ++= blist1
println("blist: " + blist)

// blist blist1       ListBuffer   :       
val blist2 = blist ++= blist1
println("blist2: " + blist2)

//      blist           
val blist3 = blist :+ 4
println("blist3: " + blist3)

//         ,  :        
blist3 -= 4
println("blist3: " + blist3)

//        
blist3 --= List(1,2)
println("blist3: " + blist3)

//        ,         
val blist4 = blist3 -- List(6,4)
println("blist4: " + blist4)

//   list        list     toList
val blist5 = blist4.toList
println("blist5: " + blist5)

3.4.2 Set
  Setは重複要素のない集合を表す.繰り返し要素をSetに加えるのは役に立たず、Setは挿入順序を保証しない.すなわち、Set中の要素は乱順である.定義:val set=Set(要素、要素、...)  (1)可変のSet import scala.collection.immutable._
//        Set  
val set = Set(1,2,3,4,5)
//    
println("    : " + set.size)
//      
println("     : " + set.min)
//      
println("     : " + set.max)
//    ,    set,  set  
println(set + 6)

val set1 = Set(1,2,6,7,8,9)
//       
println("  :" + (set & set1))
//       
println("  :" + (set | set1))
println("  :" + (set ++ set1))
//           set     
println("  :" + (set -- set1))
println("  :" + (set &~ set1))
println("  :" + set.diff(set1))
//           
println("         :" + set.count(_ > 2))
//  set,       )
println(set.slice(2, 5))
//      set,        
set.subsets(3).foreach(x => println("   set: " + x))

  (2)可変のSet import scala.collection.mutable._
//       Set
val set2 = new HashSet[Int]()
//    
set2.add(2)
set2.+=(3)
println("    :" + set2)
//          
println("    :" + (set2 ++= Set(3,4,5)))
//      
set2 -= 5
set2.remove(4)
println("    :" + set2)