scala基礎チュートリアル
9069 ワード
目次
1 if
2 for
3 while
4ユニットTuple
4.1定義方式
4.2値を取る
4.3対偶元祖
4.4タプル交換swap
5配列Array
6シーケンスList
6.1不変シーケンス
6.2可変シーケンス(パイロットが必要)
7 Mapマッピング
7.1可変集合
7.2可変集合
7.2.1集合の作成
7.2.2要素の追加
7.3値を取る
7.4遍歴
7.5 keysとvaluesの取得
8 Set
8.1不変set
8.2可変set
9伴生対象
10構築方法
1 if
2 for
3 while
4ユニットTuple
メタグループには可変と可変の区別はありません.すべて可変ではありません.
メタグループは、一連の要素をカプセル化した集合です.
メタグループは最も使用頻度が高い.
4.1定義方式
定義1:val tp 1=(1100,true,"error")
定義2:val tp 2=new Tuple 3(1100,true)/3は要素の個数を表し、要素の個数と一致しなければならない.
4.2値を取る
コーナースケールで1から開始
形式:tp 1.1
4.3対偶元祖
2つの要素しかないメタグループを対偶メタグループと呼ぶ
Mapの下位層の各要素(k,v)は,対偶要素群である.(Mapは対偶グループからなる)
4.4タプル交換swap
メタグループの要素の数:最大22個.new Tuple22(xxxx)
5配列Array
6シーケンスList
可変リスト長可変、内容可変リスト
可変リスト長とコンテンツともに可変ListBuffer
6.1不変シーケンス
デフォルトは可変シーケンスで、長さも内容も可変ではありません.リストを構築する2つの基本単位はNilと:(Nilは空のリストを表します)
Listコレクションを作成する2つの方法:
注:::オペレータは右結合されており、指定されたヘッダと末尾に新しいリストを作成します.
如9:5:5::2::Nil相当于9:(5:(2::Nil))
注:scalaではリストが空かhead要素にtailリストを追加します.
可変リストの全ての操作について、全て新規リストを生成する
6.2可変シーケンス(パイロットが必要)
ListBufferを作成する2つの方法
要素の追加:+=メソッドとappendメソッド、両方とも複数の要素を追加できます
注意:
可変リストはtoListメソッドにより新しいリストを生成することができる
ListはtoBufferによりListBufferに移行できる
7 Mapマッピング
scalaには2種類のmapがあり、1つはimmutableパッケージの下のMapであり、このMapの中の内容は可変ではなく、1つはmutableパッケージの下のMapであり、このMapの中の内容は可変である
7.1可変集合
デフォルトはimmutableパッケージの下のMapです
7.2可変集合
7.2.1集合の作成
7.2.2要素の追加
7.3値を取る
7.4遍歴
7.5 keysとvaluesの取得
8 Set
8.1不変set
長さも値も可変ではありません.setの要素は繰り返すことはできません.
8.2可変set
可変Setでは、removeメソッドは、下付きではなく要素を除去します.
9伴生対象
伴生オブジェクトは特殊な単例オブジェクトであり、相対概念であり、2つの条件を満たす必要がある.
a.同じソースファイルでb.オブジェクト名とクラス名が同じ
このような単例オブジェクトは,このクラスの伴生オブジェクトと呼ばれ,クラスはこの単例オブジェクトの伴生クラスと呼ばれる.
結論:クラスと伴生オブジェクトの間でプライベートなメソッドと属性に相互にアクセスできます.
10構築方法
コンストラクタは2つのクラスに分けられます:プライマリコンストラクタとセカンダリコンストラクタ、プライマリコンストラクタは直接クラス名の後ろで定義され、各クラスにはプライマリコンストラクタがあり、プライマリコンストラクタのパラメータは直接クラス名の後ろに配置され、クラスとインターリーブされます.コンストラクタが定義されていない場合、クラスにはデフォルトの空のパラメトリックコンストラクタがあります.
セカンダリコンストラクタ定義def thisキーワードを使用し、プライマリコンストラクタまたは他のセカンダリコンストラクタを呼び出す必要があります.
注:マスターコンストラクタはクラス定義のすべての文を実行します.
1 if
2 for
3 while
4ユニットTuple
4.1定義方式
4.2値を取る
4.3対偶元祖
4.4タプル交換swap
5配列Array
6シーケンスList
6.1不変シーケンス
6.2可変シーケンス(パイロットが必要)
7 Mapマッピング
7.1可変集合
7.2可変集合
7.2.1集合の作成
7.2.2要素の追加
7.3値を取る
7.4遍歴
7.5 keysとvaluesの取得
8 Set
8.1不変set
8.2可変set
9伴生対象
10構築方法
1 if
package com.weiyi.scala
object IfTest {
def main(args: Array[String]): Unit = {
val i = 2
val y = if (i > 1){
i
} else {
0
}
println(y)
}
}
2 for
package com.weiyi.scala
object ForTest {
def main(args: Array[String]): Unit = {
var arr = Array("a","b","c")
for (i
3 while
package com.weiyi.scala
import scala.util.control.Breaks
object WhileTest {
def main(args: Array[String]): Unit = {
val loop: Breaks = new Breaks
var i = 0
while (i < 5){
println(i)
i += 1
if (i == 3){
loop.break()
}
}
}
}
4ユニットTuple
メタグループには可変と可変の区別はありません.すべて可変ではありません.
メタグループは、一連の要素をカプセル化した集合です.
メタグループは最も使用頻度が高い.
4.1定義方式
定義1:val tp 1=(1100,true,"error")
定義2:val tp 2=new Tuple 3(1100,true)/3は要素の個数を表し、要素の個数と一致しなければならない.
4.2値を取る
コーナースケールで1から開始
形式:tp 1.1
package com.weiyi.scala
object TupleTest {
def main(args: Array[String]): Unit = {
val tp1 = ("1",2,true)
println(tp1._1)
}
}
4.3対偶元祖
2つの要素しかないメタグループを対偶メタグループと呼ぶ
Mapの下位層の各要素(k,v)は,対偶要素群である.(Mapは対偶グループからなる)
4.4タプル交換swap
scala> tp2
res17: ((String , Int) = (a,100)
scala> tp2.swap
res18: (Int, String) = (100,a)
メタグループの要素の数:最大22個.new Tuple22(xxxx)
5配列Array
package com.weiyi.scala
import scala.collection.mutable.ArrayBuffer
object ArrayTest {
def main(args: Array[String]): Unit = {
//
// , , , 。
// : new, apply ,
val arr1: Array[Int] = Array[Int](1,2,3)
// new ,
val arr2: Array[Int] = new Array[Int](10)
// , 0 :
println(arr1(0))
// import scala.collection.mutable.ArrayBuffer
val ab: ArrayBuffer[Int] = ArrayBuffer[Int](1,3,4)
val ab2 = new ArrayBuffer[Int]()
//
// +=
ab += 1
//
ab += (2,3,4)
ab -= (3,4)
//
ab ++= Array(7,8)
//
ab ++= ArrayBuffer(9,0)
// insert, ,
ab.insert(0, -1, 0)
// remove, ,
ab.remove(8, 2)
//
ab.clear()
println(ab)
}
}
6シーケンスList
可変リスト長可変、内容可変リスト
可変リスト長とコンテンツともに可変ListBuffer
6.1不変シーケンス
デフォルトは可変シーケンスで、長さも内容も可変ではありません.リストを構築する2つの基本単位はNilと:(Nilは空のリストを表します)
Listコレクションを作成する2つの方法:
package com.weiyi.scala
object ListTest {
def main(args: Array[String]): Unit = {
val list1: List[Int] = List[Int](1,2,3)
val list2: List[Int] = 9::5::2::Nil
}
}
注:::オペレータは右結合されており、指定されたヘッダと末尾に新しいリストを作成します.
如9:5:5::2::Nil相当于9:(5:(2::Nil))
注:scalaではリストが空かhead要素にtailリストを追加します.
可変リストの全ての操作について、全て新規リストを生成する
package com.weiyi.scala
object ImmutListTest {
def main(args: Array[String]): Unit = {
//
val lst1 = List(1,2,3)
// 0 lst1 List
val lst2 = 0::lst1
val lst3 = 0+:lst1
// lst1
val lst6 = lst1:+3
val lst0 = List(4,5,6)
// 2 list list
val lst7 = lst1 ++ lst0
val lst8 = lst1 ++: lst0
val lst9 = lst1 ::: lst0
val lst11 = List.concat(lst1,lst0)
//
lst1.reverse
//
val head: Int = lst1.head
//
val tail: List[Int] = lst1.tail
}
}
6.2可変シーケンス(パイロットが必要)
import scala.collection.mutable.ListBuffer
ListBufferを作成する2つの方法
package com.weiyi.scala
import scala.collection.mutable.ListBuffer
object MutListTest {
def main(args: Array[String]): Unit = {
// ListBuffer
val lb1: ListBuffer[Int] = ListBuffer[Int]()//
val lb2: ListBuffer[Int] = new ListBuffer[Int]()//
}
}
要素の追加:+=メソッドとappendメソッド、両方とも複数の要素を追加できます
package com.weiyi.scala
import scala.collection.mutable.ListBuffer
object MutListTest {
def main(args: Array[String]): Unit = {
val lst0: ListBuffer[Int] = ListBuffer[Int](1,2,3)
val lst1: ListBuffer[Int] = new ListBuffer[Int]()
// lst1 :
lst1+=(3,4)
lst1.append(5)
// lst0 lst1 ListBuffer :
val lst2 = lst0 ++ lst1
}
}
注意:
可変リストはtoListメソッドにより新しいリストを生成することができる
ListはtoBufferによりListBufferに移行できる
7 Mapマッピング
scalaには2種類のmapがあり、1つはimmutableパッケージの下のMapであり、このMapの中の内容は可変ではなく、1つはmutableパッケージの下のMapであり、このMapの中の内容は可変である
7.1可変集合
デフォルトはimmutableパッケージの下のMapです
package com.weiyi.scala
object MapTest {
def main(args: Array[String]): Unit = {
val mp1: Map[String, Int] = Map(("a",1),("b",2))
val mp2: Map[String, Int] = Map("a"->1,"b"->2)
// map
val mp3: Map[String, Int] = mp2+("c"->3)
}
}
7.2可変集合
7.2.1集合の作成
package com.weiyi.scala
import scala.collection.mutable
object MapTest2 {
def main(args: Array[String]): Unit = {
val mp4 = new mutable.HashMap[String,Int]()
val mp5: mutable.Map[String, Int] = mutable.Map[String,Int]()
}
}
7.2.2要素の追加
package com.weiyi.scala
import scala.collection.mutable
object MapTest2 {
def main(args: Array[String]): Unit = {
val mp4 = new mutable.HashMap[String,Int]()
mp4 += ("e"->8,"f"->9)
mp4 += (("b1",12))
mp4.put("ly",56)
mp4("zx") = 24
}
}
7.3値を取る
mp4("a")
mp4.get("xxyy")
// , :
mp4.getOrElse("xxyy",9876)
7.4遍歴
for (i
7.5 keysとvaluesの取得
val keys: Iterable[String] = mp4.keys
val values: Iterable[Int] = mp4.values
8 Set
8.1不変set
長さも値も可変ではありません.setの要素は繰り返すことはできません.
package com.weiyi.scala
object ImmutSetTest {
def main(args: Array[String]): Unit = {
// immutable Set
val set1: Set[Int] = Set(1,2,3)
// Set
val s2: Set[Int] = set1 + (10,12)
val s3: Set[Int] = set1 - (1)
println(set1)
}
8.2可変set
可変Setでは、removeメソッドは、下付きではなく要素を除去します.
package com.weiyi.scala
import scala.collection.mutable
object MuSetTest {
def main(args: Array[String]): Unit = {
val mSet: mutable.HashSet[Int] = new mutable.HashSet[Int]()
val mutableSet = mutable.Set(1,2,3)
mutableSet.add(4)
mutableSet += (7,8)
mutableSet ++= mutable.Set(12,34)
mutableSet -= (3,2)
//remove
mutableSet.remove(2)
println(mutableSet)
//
val an: Set[Int] = mutableSet.toSet
}
}
9伴生対象
伴生オブジェクトは特殊な単例オブジェクトであり、相対概念であり、2つの条件を満たす必要がある.
a.同じソースファイルでb.オブジェクト名とクラス名が同じ
このような単例オブジェクトは,このクラスの伴生オブジェクトと呼ばれ,クラスはこの単例オブジェクトの伴生クラスと呼ばれる.
結論:クラスと伴生オブジェクトの間でプライベートなメソッドと属性に相互にアクセスできます.
package com.weiyi.scala
class People {
val id = 1
private var name = "lll"
def prntName()={
println(People.von + name)
}
}
object People{
//
private val von = "aa"
def main(args: Array[String]): Unit = {
val p = new People()
// name
p.name = "123"
p.prntName()
}
}
10構築方法
コンストラクタは2つのクラスに分けられます:プライマリコンストラクタとセカンダリコンストラクタ、プライマリコンストラクタは直接クラス名の後ろで定義され、各クラスにはプライマリコンストラクタがあり、プライマリコンストラクタのパラメータは直接クラス名の後ろに配置され、クラスとインターリーブされます.コンストラクタが定義されていない場合、クラスにはデフォルトの空のパラメトリックコンストラクタがあります.
セカンダリコンストラクタ定義def thisキーワードを使用し、プライマリコンストラクタまたは他のセカンダリコンストラクタを呼び出す必要があります.
注:マスターコンストラクタはクラス定義のすべての文を実行します.
package com.weiyi.scala
// , ,
class Person(val name:String,val age:Int){
//
println(" ")
private var gender = "male"
// this
def this(name: String,age:Int,gender:String){
//
this(name,age)
println(" ")
this.gender = gender
}
private var height = 175
/* def this(name: String,age:Int,gender:String,height:Int){
//
this(name,age,gender)
println(" ")
this.gender = gender
this.height = height
}*/
}
object Person {
def main(args: Array[String]): Unit = {
val person: Person = new Person("a",12)
val person2: Person = new Person("a",12,"333")
}
}