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
3.1.2配列の遍歴
3.1.3配列変換
3.1.4配列共通アルゴリズム
3.2マッピング
3.2.1マッピングの宣言
3.2.2可変マッピングの操作
3.2.3可変マッピングの操作
3.3メタグループ
3.3.1メタグループの作成
3.3.2メタグループの値の取得
3.3.3対偶ユニットの回転集合
3.3.4ファスナー操作
3.4集合
Scalaの集合には3種類ある:シーケンスSeq,Set,マッピングMap,すべての集合はIterable特質から拡張され,Scalaには可変(mutable)と可変(immutable)の2種類が集合しており,immutableタイプの集合は初期化後は変更できない(val修飾の変数と区別することに注意)
3.4.1 List
(1)可変シーケンスimport scala.collection.immutable._
(2)可変シーケンスimport scala.collection.mutable._
3.4.2 Set
Setは重複要素のない集合を表す.繰り返し要素をSetに加えるのは役に立たず、Setは挿入順序を保証しない.すなわち、Set中の要素は乱順である.定義:val set=Set(要素、要素、...) (1)可変のSet import scala.collection.immutable._
(2)可変のSet import scala.collection.mutable._
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)