Scalaの一覧(リスト)
Scalaの一覧(リスト)
Scalaのリストは配列に似ている、彼らはすべての要素の同じタイプであるが、それらは異なっている:リストは不変であるそれらが定義されると、値が再帰構造(つまり、リンクテーブルの構造である)と、アレイとのリストが続き、変更することはできませんいいえ。 。
要素型Tは、リスト[T]のリストのように書くことができます。 例えば、以下は、様々なタイプのリストを示しています。
// 字符串列表 val site: List[String] = List("w3big", "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がまた空のリストとして表すことができます。
私たちは、次のように上記の例は書くことができます。
// 字符串列表 val site = "w3big" :: ("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つの基本的な動作を発現するために使用することができます。 例としては、次のとおりです:
object Test { def main(args: Array[String]) { val site = "w3big" :: ("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 第一网站是 : w3big 最后一个网站是 : List(Google, Baidu) 查看列表 site 是否为空 : false 查看 nums 是否为空 : true
接続リスト
あなたは:::演算子またはリストを使用することができます。:: :()メソッドまたはList.concat()メソッドは、2つ以上のリストを接続します。 例としては、次のとおりです:
object Test { def main(args: Array[String]) { val site1 = "w3big" :: ("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(w3big, Google, Baidu, Facebook, Taobao) site1.:::(site2) : List(Facebook, Taobao, w3big, Google, Baidu) List.concat(site1, site2) : List(w3big, Google, Baidu, Facebook, Taobao)
List.fill()
私たちは、要素のリストの繰り返しの数を指定して作成するList.fill()メソッドを使用することができます。
object Test { def main(args: Array[String]) { val site = List.fill(3)("w3big") // 重复 w3big 3次 println( "site : " + site ) val num = List.fill(10)(2) // 重复元素 2, 10 次 println( "num : " + num ) } }
上記のコードの実装、出力は次のようになります。
$ vim Test.scala $ scala Test.scala site : List(w3big, w3big, w3big) num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
List.tabulate()
List.tabulate()メソッドは、指定された関数によってリストを作成するために使用されます。
:最初の引数は、次のような例は、2次元とすることができる要素の数、指定された関数の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 = "w3big" :: ("Google" :: ("Baidu" :: Nil)) println( "site 反转前 : " + site ) println( "site 反转前 : " + site.reverse ) } }
上記のコードの実装、出力は次のようになります。
$ vim Test.scala $ scala Test.scala site 反转前 : List(w3big, Google, Baidu) site 反转前 : List(Baidu, Google, w3big)
Scalaのリスト一般的な方法
次の表では、Scalaのリスト一般的な方法を示しています。
いいえ。 | メソッドと説明 |
---|---|
1 | デフ+ :( elemは:A):リスト[A] 事前要素のリストに追加します scala> val x = List(1) x: List[Int] = List(1) scala> val y = 2 +: x y: List[Int] = List(2, 1) scala> println(x) List(1) |
2 | デフ::( X:A):リスト[A] 要素を追加するには、リストの先頭で |
3 | デフ:: :(接頭辞:リスト[A ]):リスト[A] リストの先頭に指定されたリストの要素を追加します |
4 | デフ:+(elemは:A) :リスト[A] あなたがリストをコピーした後に要素を追加します。 scala> val a = List(1) a: List[Int] = List(1) scala> val b = a :+ 2 b: List[Int] = List(1, 2) scala> println(a) List(1) |
5 | デフaddString(B:StringBuilderの):のStringBuilder StringBuilderに、リストのすべての要素を追加します。 |
6 | デフaddString(B:StringBuilderを、9月 :文字列):StringBuilderの StringBuilderに、リストのすべての要素を追加し、区切り文字を指定 |
7 | デフ適用されます(nは:INT): インデックスで要素のリストを取得します。 |
8 | :デフ(:任意ELEM)が含まれていブール リストに指定された要素が含まれているかどうかを検出します |
9 | デフcopyToArray(XS:配列[A ]、起動します。int、LEN:INT):ユニット 配列にコピーし、リストの要素を。 |
10 | デフ別個:リスト[A] リストの重複要素を削除して、新しいリストを返します。 |
11 | デフドロップ(N:INT):リスト[A] 最初のn個の要素を捨てて、新しいリストを返します。 |
12 | デフdropRight(N:INT):リスト[A] 最後のn個の要素を捨てて、新しいリストを返します。 |
13 | デフdropWhile(P:(A) =>ブール):リスト[A] 条件が満たされ、pがなくなるまで廃棄要素は、左から右へ |
14 | デフendsWith [B](その:のSeq [B]):ブール 指定されたシーケンスの最後にリストかどうかを検出 |
15 | デフ等号(つまり:任意):ブール 同じかどうかを確認します |
16 | デフ(:(A)は、pが存在するブール:=>ブール値) 存在する要素のリストに指定された条件を分析します。 Lは、要素が存在するかどうかを判断します。 scala> l.exists(s => s == "Hah") res7: Boolean = true |
17 | デフ(:(A)は、pフィルタリスト[A]:=>ブール値) 出力シンボルのすべての要素が条件を指定しました。 フィルタ要素3の長さ: scala> l.filter(s => s.length == 3) res8: List[String] = List(Hah, WOW) |
18 | デフのforall(P:(A) =>ブール):ブール すべての要素の検出。 たとえば、次のように先頭に「H」のすべての要素かどうかを判断します。 Scalaの> l.forall(S => s.startsWith( "H"))res10:ブール=偽 |
19 | デフforeachの(F:(A) =>ユニット):ユニット リストへの関数のすべての要素 |
20 | デフヘッド: リストの最初の要素を取得します。 |
21 | デフのindexOf(elemは:A、から :INT):のInt から指定された場所からの要素の最初の発生の位置を探します |
22 | デフのinit:リスト[A] 最後の1を除いて、すべての要素を返します。 |
23 | デフ(のことを:配列[A交差 ]):リスト[A] セットの共通部分を複数の計算 |
24 | デフのisEmpty:ブール リストが空であるかどうかを検出します |
25 | デフイテレータ:イテレータ[A] 要素を反復処理するために、新しいイテレータを作成します。 |
26 | デフ続きます: 最後の要素を返します。 |
27 | デフのlastIndexOf(elemは:A、エンド :INT):のInt 位置指定された終了位置にある要素の最後に出現を探し始めます |
28 | デフの長さ:のInt 戻るリストの長さに |
29 | DEFマップ[B](F: (A)=> B):リスト[B] 指定されたメソッドを介してすべての要素を再計算します |
30 | デフ最大: 最大の要素を探します |
31 | デフ分:A 最小の要素を探します |
32 | デフmkString:文字列 文字列としてすべての要素のリストを表示します |
33 | デフmkString(9月:文字列):文字列 セパレータは文字列としてすべての要素のリストが表示されます |
34 | デフリバース:リスト[A] リバースリスト |
35 | defのソート[B>:A] :リスト[A] リストの並べ替え |
36 | デフのstartsWith [B](その:のSeq [B]、オフセット:INT):ブール値 リストには、指定した位置に指定されたシーケンスが含まれているかどうかを検出 |
37 | デフ合計: 要素の計算および収集 |
38 | デフテール:リスト[A] 最初の1を除いて、すべての要素を返します。 |
39 | デフ取る(N:int)を:リスト[A] リストの最初のn個の要素を抽出 |
40 | デフtakeRight(N:INT):リスト[A] リストを抽出したn個の要素 |
41 | デフのtoArray:配列[A] 配列へのリスト |
42 | デフtoBuffer [B>:A] :バッファ[B] バックバッファは、すべての要素のリストが含まれています |
43 | デフtoMap [T、U]:マップ[T、U] リストには、地図を変換しました |
44 | デフtoSeq:配列[A] リストのSeqに変換 |
45 | デフtoSet [B>:A] :セット[B] リストコンバートセット |
46 | デフのtoString():文字列 文字列リストに変換 |
参照するより多くの方法APIドキュメント