Scala関数式プログラミング-Listの一般的な方法

4255 ワード

1、Listの作成
Scalaリストは配列に類似しており、すべての要素のタイプは同じですが、リストは可変であり、値が定義されると変更できません.次に、リストは再帰的な構造(つまりリンクテーブル構造)を有し、配列は異なります.リストの要素タイプTは、List[T]と書くことができる.たとえば、次のような種類のリストが表示されます.
val site:List[String] = List("Runoob","Baidu","Google")
val nums:List[Int] = List(1,2,3,4)
val empty:List[Nothing] = List()
val dim:List[List[Int]] = List(
        List(1,0,0),List(0,1,0),List(0,0,1)
      )

もちろん、Nilとリストの作成を行うこともできます.
val site1 = "Runoob" :: ("Baidu" :: ("Google" :: Nil))
val nums1 = 1 :: (2 :: (3 :: (4 :: Nil)))
val empty1 = Nil
val dim1 = (1 :: (0 :: (0 :: Nil))) ::
                 (0 :: (1 :: (0 :: Nil))) ::
                 (0 :: (0 :: (1 :: Nil))) :: Nil

2、List要素の取得及び遍歴
リスト全体を印刷するにはprintlnメソッドを直接使用すればよいがlistを巡回するにはforループを使用することができる.同時に,(n)またはapply(n)を用いてListのn番目の要素にアクセスすることができる.
println(site(0))
println(dim(1)(1))
println(site.apply(0))
println(dim.apply(1)(1))
println(site)
for(i 

出力:
Runoob
1
Runoob
1
List(Runoob, Baidu, Google)
Runoob
Baidu
Google

リスト内の要素にアクセスするには、特別な方法を使用することもできます.たとえば、head戻りリストの最初の要素tailは、最初の要素以外の要素lastを含むリストを返します.最後の最初の要素isEmptyは、リストが空の場合trueを返します.
println( "      : " + site.head )
//tail                
println("           " + site.tail)
println( "        : " + site.last )
println( "     site      : " + site.isEmpty )
println( "   nums      : " + nums.isEmpty )

出力:
      : Runoob
           List(Baidu, Google)
        : Google
     site      : false
   nums      : false

3、List接続
::演算子またはList.::()メソッドまたはList.concat()メソッドは、2つ以上のリストを接続します.例は次のとおりです.
val site2 = "Facebook" :: ("Taobao" :: Nil)
val site_all1 = site1 ::: site2
println( "site1 ::: site2 : " + site_all1 )
val site_all2 = site1.:::(site2)
println( "site1.:::(site2) : " + site_all2 )
val site_all3 = List.concat(site1,site2)
println( "List.concat(site1, site2) : " + site_all3  )

出力:
site1 ::: site2 : List(Runoob, Baidu, Google, Facebook, Taobao)
site1.:::(site2) : List(Facebook, Taobao, Runoob, Baidu, Google)
List.concat(site1, site2) : List(Runoob, Baidu, Google, Facebook, Taobao)

4、使用方法によるListの作成
リストを使用できます.fill()メソッドを使用して、重複数を指定する要素のリストを作成します.
val fillsite = List.fill(3)("Runoob")
println( "site : " + fillsite  )
val fillnum = List.fill(10)(2)
println( "num : " + fillnum  )

出力:
site : List(Runoob, Runoob, Runoob)
num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

List.tabulate()メソッドは、指定された関数によってリストを作成します.メソッドの最初のパラメータは要素の数であり、2 Dであってもよく、2番目のパラメータは指定された関数であり、指定された関数の計算結果を返してリストに挿入します.開始値は0です.例は次のとおりです.
val squares = List.tabulate(6)(x=>x*x)
println( "   : " + squares  )
val mul = List.tabulate(4,5)(_ * _)
println( "   : " + mul  )

出力:
   : List(0, 1, 4, 9, 16, 25)
   : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))

5、List常用方法(更新中)
リバース反転
println( "site     : " + site )
println( "site     : " + site.reverse )

出力:
site     : List(Runoob, Baidu, Google)
site     : List(Google, Baidu, Runoob)

要素の追加
リストは可変であるため、リストに要素を追加するには、新しいリストが返されます.
val a:List[Int] = List(1,2)
val b = 3 +: a
println(b)
val c = a :+ 3
println(c)

出力:
List(3, 1, 2)
List(1, 2, 3)

containsに要素が含まれているかどうか
println("site     FaceBook:" + site.contains("FaceBook"))

出力:
site     FaceBook:false

リストのすべての要素に関数を適用
foreachの戻り値がない場合、mapは新しいリストを返します.
c.foreach(x => x * 2)
val d = c.map(_ * 2)
println(d)

mkString:ListをStringに変換
println(nums.mkString(","))

出力:
1,2,3,4

sortedソート
val e = b.sorted
println(e)

出力:
List(1, 2, 3)