Scalaリスト

7532 ワード

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

  //     
  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) )

リストを構築する2つの基本単位は、Nilと::Nilは空のリストとして表すこともできます.上記の例は以下のように書くことができます.
//      
val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))

//     
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))

//    
val empty = Nil

//     
val dim = (1 :: (0 :: (0 :: Nil))) :: (0 :: (1 :: (0 :: Nil))) :: (0 :: (0 :: (1 :: Nil))) :: Nil

リストの基本操作
Scalaリストには3つの基本操作があります.head:リストの最初の要素tailを返します.リストを返します.最初の要素以外の要素isEmptyを含みます.リストが空の場合trueを返します.
この3つの基本的な操作は、Scalaリストのどの操作に対しても使用できます.例は次のとおりです.
object Test { 
    def main(args: Array[String]) {
         val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil)) 
         val nums = Nil
         println( "      : " + site.head )
         println( "        : " + site.tail )
         println( "     site      : " + site.isEmpty )
         println( "   nums      : " + nums.isEmpty ) 
    }
}

以上のコードを実行し、出力結果は次のとおりです.
$ vim Test.scala 
$ scala Test.scala 
      : Runoob
        : List(Google, Baidu)
     site 
     : false
   nums
     : true

接続リスト::演算子またはList.::()メソッドまたはList.concat()メソッドは、2つ以上のリストを接続します.例は次のとおりです.
object Test {
   def main(args: Array[String]) { 
          val site1 = "Runoob" :: ("Google" :: ("Baidu" :: Nil)) 
          val site2 = "Facebook" :: ("Taobao" :: Nil)
          //    :::    
           var fruit = site1 ::: site2
           println( "site1 ::: site2 : " + fruit ) 
          //    Set.:::()    
           fruit = site1.:::(site2) 
           println( "site1.:::(site2) : " + fruit ) 
          //    concat    
           fruit = List.concat(site1, site2) 
           println( "List.concat(site1, site2) : " + fruit ) 
    }
}

以上のコードを実行し、出力結果は次のとおりです.
$ vim Test.scala 
$ scala Test.scala 
 site1 ::: site2 : List(Runoob, Google, Baidu, Facebook, Taobao)
 site1.:::(site2) : List(Facebook, Taobao, Runoob, Google, Baidu)
 List.concat(site1, site2) : List(Runoob, Google, Baidu, Facebook, Taobao)

List.fill()リストを使用できます.fill()メソッドを使用して、重複数を指定する要素のリストを作成します.
        object Test {
                def main(args: Array[String]) { 
                        val site = List.fill(3)("Runoob")
                       //    Runoob 3  
                      println( "site : " + site ) 
                      val num = List.fill(10)(2)
                   //      2, 10  
                   println( "num : " + num ) 
        }
  }

以上のコードを実行し、出力結果は次のとおりです.
  $ vim Test.scala 
  $ scala Test.scala 
  site : List(Runoob, Runoob, Runoob)
  num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)

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

以上のコードを実行し、出力結果は次のとおりです.
$ vim Test.scala 
$ scala Test.scala 
   : 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))

List.reverse List.reverseは、リストの順序を反転するために使用されます.例は次のとおりです.
        object Test { 
              def main(args: Array[String]) { 
                    val site = "Runoob" :: ("Google" :: ("Baidu" :: Nil))
                    println( "site     : " + site ) 
                    println( "site     : " + site.reverse )
           }
    }

以上のコードを実行し、出力結果は次のとおりです.
$ vim Test.scala
$ scala Test.scala 
site     : List(Runoob, Google, Baidu)
site     : List(Baidu, Google, Runoob)

Scala List共通メソッド次の表に、Scala List共通メソッド:シーケンス番号メソッドおよび説明を示します.
1 def+:(elem:A):List[A]リストに要素scala>val x=List(1)x:List[Int]=List(1)scala>val y=2+:xy:List[Int]=List(2,1)scala>println(x)List(1)
2 def::(x:A):List[A]リストの先頭に要素を追加
3 def:::(prefix:List[A]):List[A]リストの先頭に指定リストの要素を追加
4 def:+(elem:A):List[A]追加要素をコピーしたリスト.scala> val a = List(1)a: List[Int] = List(1)scala> val b = a :+ 2b: List[Int] = List(1, 2)scala> println(a)List(1)
5 def addString(b:StringBuilder):StringBuilderリストのすべての要素をStringBuilderに追加
6 def addString(b:StringBuilder,sep:String):StringBuilderリストのすべての要素をStringBuilderに追加し、区切り記号を指定します.
7 def apply(n:Int):Aリストインデックスから要素を取得
8 def contains(elem:Any):Booleanは、リストに指定した要素が含まれているかどうかを検出します.
9 def copyToArray(xs:Array[A],start:Int,len:Int):Unitリストの要素を配列にコピーします.
10 def distinct:List[A]リストの重複要素を除去し、新しいリストに戻る
11 def drop(n:Int):List[A]前のn要素を破棄し、新しいリストに戻る
12 def dropRight(n:Int):List[A]最後のn要素を破棄し、新しいリストに戻る
13 def dropWhile(p:(A)=>Boolean):List[A]条件pが成立しないまで左から右へ元素を捨てる
14 def endsWith[B](that:Seq[B]):Booleanはリストが指定したシーケンスで終わるかどうかを検出する
15 def equals(that:Any):Booleanは等しいかどうかを判断する
16 def exists(p:(A)=>Boolean):Booleanは、リストに指定された条件の要素が存在するかどうかを判断します.lに要素があるかどうかを判断します:scala>l.exists(s=>s="Hah")res 7:Boolean=true
17 def filter(p:(A)=>Boolean):List[A]出力記号指定条件のすべての要素.長さ3の要素をフィルタ:scala>l.filter(s=>s.length==3)res 8:List[String]=List(Hah,WOW)
18 def forall(p:(A)=>Boolean):Booleanはすべての要素を検出します.たとえば、すべての要素が「H」で始まるかどうかを判断します.scala>l.forall(s=>s.startsWith(「H」)res 10:Boolean=false
19 def foreach(f:(A)=>Unit):リストのすべての要素に関数を適用するUnit
20 def head:Aリストの最初の要素を取得
21 def indexOf(elem:A,from:Int):Intは、指定された場所fromからエレメントが初めて現れる場所を検索します.
22 def init:List[A]は、最後の要素を除いてすべての要素を返します.
23 def intersect(that:Seq[A]):List[A]複数の集合の交差を計算する
24 def isEmpty:Boolean検出リストが空かどうか
25 def iterator:Iterator[A]新しい反復器を作成して要素を反復
26 def last:Aは最後の要素を返します
27 def lastIndexOf(elem:A,end:Int):Intが指定した場所endでエレメントが最後に現れる場所の検索を開始
28 def length:Int戻りリスト長
29 def map[B](f:(A)=>B):List[B]は、与えられた方法ですべての要素を再計算する
30 def max:A最大要素を検索
31 def min:A最小要素の検索
32 def mkString:Stringリストのすべての要素を文字列として表示
33 def mkString(sep:String):Stringは区切り記号を使用してリストのすべての要素を文字列として表示します.
34 def reverse:List[A]リスト反転
35 def sorted[B>:A]:List[A]リストソート
36 def startsWith[B](that:Seq[B],offset:Int):Booleanは、指定された場所に指定されたシーケンスが含まれているかどうかを検出します.
37 def sum:A集合要素の和を計算する
38 def tail:List[A]は、最初の要素を除いてすべての要素を返します.
39 def take(n:Int):List[A]抽出リストの最初のn個の要素
40 def takeRight(n:Int):List[A]抽出リストの後n個の要素
41 def toArray:Array[A]リストを配列に変換
42 def toBuffer[B>:A]:Buffer[B]は、リストのすべての要素を含むバッファを返します.
43 def toMap[T,U]:Map[T,U]ListをMapに変換
44 def toSeq:Seq[A]ListをSeqに変換
45 def toSet[B>:A]:Set[B]ListからSetに変換
46 def toString():Stringリストを文字列に変換