English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Map(映射)은 반복 가능한 키 값 쌍(key/value) 구조.
모든 값은 키를 통해 얻을 수 있습니다.
Map의 키는 모두 유일합니다.
Map은 또한 해시 테이블(Hash tables)이라고도 합니다.
Map은 변경 가능하고 불변 두 가지 유형이 있습니다. 변경 가능한 객체는 변경할 수 있지만 불변 객체는 변경할 수 없습니다.
기본적으로 Scala는 불변 Map을 사용합니다. 변경 가능한 집합을 사용하려면 명시적으로 가져오셔야 합니다. import scala.collection.mutable.Map 类
在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。以下示例演示了不可变 Map 的应用:
// 空哈希表,键为字符串,值为整型 var A:Map[Char,Int] = Map() // Map 键值对演示 val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
定义 Map 时,需要为键值对定义类型。如果需要添加 key-value 对,可以使用 + 號,如下所示:
A += ('I' -> 1colors = colors A += ('J' -> 5colors = colors A += ('K' -> 10colors = colors A += ('L' -> 100)
Scala Map 有三个基本操作:
方法 | 描述 |
---|---|
keys | 返回 Map 所有的键(key) |
values | 返回 Map 所有的值(value) |
isEmpty | 在 Map 为空时返回true |
以下示例演示了以上三个方法的基本应用:
object Test { def main(args: Array[String]) { val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F) val nums: Map[Int, Int] = Map() println( "colors 中的键为 : " + colors.keys ) println( "colors 中的值为 : " + colors.values ) println( "检测 colors 是否为空 : " + colors.isEmpty ) println( "检测 nums 是否为空 : " + nums.isEmpty ) } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test colors 中的键为 : Set(red, azure, peru) colors 中的值为 : MapLike(#FF0000, #F0FFFF, #CD853F) 检测 colors 是否为空 : false 检测 nums 是否为空 : true
Map에 지정된 Key가 존재하는지 확인할 수 있습니다. ++ 运算符或 Map.++()) 方法来连接两个 Map,Map 合并时会移除重复的 key。以下演示了两个 Map 合并的示例:
object Test { def main(args: Array[String]) { 1 = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F) 2 val colors -= Map("blue"33> "#00 FF", -"yellow" > "#FFFF00", -"red" // ++ > "#FF0000") 作为中国运算자1 ++ : Map(blue2 )1 ++ : Map(blue2 var colors = colors + ) : " // ++ : " 作为中国方法1colors++.2colors = colors )1colors++.2println("colors" + ) : " } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test : Map(blue1 ++ : Map(blue2 colors ) -) : Map(blue33> #00 -FF, azure -> #F0FFFF, peru853> #CD -F, yellow -> #FFFF00, red : Map(blue1colors++.2(colors -) : Map(blue33> #00 -FF, azure -> #F0FFFF, peru853> #CD -F, yellow -> #FFFF00, red
Map의 keys와 values 출력
object Test { def main(args: Array[String]) { val sites = Map("w"3codebox" -> "http://ko.oldtoolbag.com", "baidu" -> "http://www.baidu.com", "taobao" -> "http://www.taobao.com" 아래는 foreach 루프를 통해 Map의 keys와 values를 출력합니다: sites.keys.foreach{i => + print("Key = " i ) + println(" Value = " } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test sites(i))}3Key = w//ko.oldtoolbag.com codebox Value = http://www.baidu.com Key = baidu Value = http://Key = taobao Value = http:
Map에 지정된 Key가 존재하는지 확인할 수 있습니다. Map.contains Map에 지정된 Key가 존재하는지 확인하는 메서드를 보여줍니다. 예제는 다음과 같습니다:
object Test { def main(args: Array[String]) { val sites = Map("w"3codebox" -> "http://ko.oldtoolbag.com", "baidu" -> "http://www.baidu.com", "taobao" -> "http://www.taobao.com" if(sites.contains("w"3codebox")){ println("w"3codebox 키가 존재하며, 해당 값은 :" + sites("w"3codebox } println("w"3codebox 키가 존재하지 않습니다") } if(sites.contains("baidu")){ println("baidu 키가 존재하며, 해당 값은 :") + sites("baidu") } println("baidu 키가 존재하지 않습니다") } if( sites.contains( "google" )){ if( sites.contains("google")) { + println("google 키가 존재하며, 해당 값은 ": } println("google 키가 없습니다") } } }
위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:
$ scalac Test.scala $ scala Test w3codebox 키가 존재하며, 해당 값은 :http://ko.oldtoolbag.com baidu 키가 존재하며, 해당 값은 :http://www.baidu.com google 키가 없습니다
다음 표는 Scala Map에서 자주 사용되는 메서드를 나열합니다:
순번 | 메서드 및 설명 |
---|---|
1 | def ++(xs: Map[(A, B)]): Map[A, B] 새로운 Map을 반환하며, 새로운 Map xs를 구성합니다 |
2 | def -(elem1: A, elem2: A, elems: A*): Map[A, B] 키가 elem인 새로운 Map을 반환합니다1, elem2 또는 elems를 추가합니다 |
3 | def --(xs: GTO[A]): Map[A, B] xs 객체에 해당하는 키를 제거한 새로운 Map을 반환합니다 |
4 | def get(key: A): Option[B] 지정된 키의 값을 반환합니다 |
5 | def iterator: Iterator[(A, B)] 새로운 이터레이터를 생성하고 key를 출력합니다/value 대 |
6 | def addString(b: StringBuilder): StringBuilder Map의 모든 요소를 StringBuilder에 추가할 수 있으며, 구분자를 추가할 수 있습니다 |
7 | def addString(b: StringBuilder, sep: String): StringBuilder Map의 모든 요소를 StringBuilder에 추가할 수 있으며, 구분자를 추가할 수 있습니다 |
8 | def apply(key: A): B 지정된 키의 값을 반환하며, 존재하지 않으면 Map의 기본 메서드를 반환합니다 |
9 | def clear(): Unit Map을 비웁니다 |
10 | def clone(): Map[A, B] 从一个 Map을 다른 Map로 복사합니다 |
11 | def contains(key: A): Boolean Map에 지정된 키가 존재하면 true를 반환하며, 없으면 false를 반환합니다. |
12 | def copyToArray(xs: Array[(A, B)]): Unit 집합을 배열에 복사합니다 |
13 | def count(p: ((A, B)) => Boolean): Int 지정된 조건을 만족하는 집합 요소의 개수를 계산합니다 |
14 | def default(key: A): B Map의 기본 값을 정의하고, key가 존재하지 않으면 반환합니다 |
15 | def drop(n: Int): Map[A, B] 앞쪽 n개 요소를 버린 새로운 집합을 반환합니다 |
16 | def dropRight(n: Int): Map[A, B] 마지막 n개 요소를 버린 새로운 집합을 반환합니다 |
17 | def dropWhile(p: ((A, B)) => Boolean): Map[A, B] 조건 p이 더 이상 만족되지 않을 때까지 왼쪽에서 오른쪽으로 요소를 버립니다 |
18 | def empty: Map[A, B] 동일한 타입의 비어 있는 Map을 반환합니다 |
19 | def equals(that: Any): Boolean 두 Map이 같으면(key/value가 모두 같으면 true를 반환하고, 그렇지 않으면 false를 반환합니다 |
20 | def exists(p: ((A, B)) => Boolean): Boolean 집합에서 지정된 조건을 만족하는 요소가 존재하는지 확인합니다 |
21 | def filter(p: ((A, B))=> Boolean): Map[A, B] 지정된 조건을 만족하는 모든 집합을 반환합니다 |
22 | def filterKeys(p: (A) => Boolean): Map[A, B] 지정된 조건을 만족하는 불변 Map을 반환합니다 |
23 | def find(p: ((A, B)) => Boolean): Option[(A, B)] 지정된 조건을 만족하는 첫 번째 요소를 찾습니다 |
24 | def foreach(f: ((A, B)) => Unit): Unit 함수를 집합의 모든 요소에 적용합니다 |
25 | def init: Map[A, B] 마지막 요소를 제외한 모든 요소를 반환합니다 |
26 | def isEmpty: Boolean Map이 비어 있는지 확인합니다 |
27 | def keys: Iterable[A] 모든 키를 반환합니다/p> |
28 | def last: (A, B) 마지막 요소를 반환합니다 |
29 | def max: (A, B) 최대 요소를 찾습니다 |
30 | def min: (A, B) 최소 요소를 찾습니다 |
31 | def mkString: String 집합의 모든 요소를 문자열로 표시합니다 |
32 | def product: (A, B) 집합의 숫자 요소의 곱을 반환합니다. |
33 | def remove(key: A): Option[B] 지정된 키를 제거합니다 |
34 | def retain(p: (A, B) => Boolean): Map.this.type 조건을 만족하면 true를 반환합니다 |
35 | def size: Int Map 요소의 개수를 반환합니다 |
36 | def sum: (A, B) 집합에 포함된 모든 숫자 요소의 합을 반환합니다 |
37 | def tail: Map[A, B] 첫 번째 요소를 제외한 나머지 요소를 포함한 집합을 반환합니다 |
38 | def take(n: Int): Map[A, B] n개의 앞부분 요소를 반환합니다 |
39 | def takeRight(n: Int): Map[A, B] n개의 마지막 요소를 반환합니다 |
40 | def takeWhile(p: ((A, B)) => Boolean): Map[A, B] 지정된 조건을 만족하는 요소를 반환합니다 |
41 | def toArray: Array[(A, B)] 집합을 배열로 변환 |
42 | def toBuffer[B >: A]: Buffer[B] Map의 모든 요소를 포함한 버퍼를 반환합니다 |
43 | def toList: List[A] Map의 모든 요소를 포함한 List를 반환합니다 |
44 | def toSeq: Seq[A] Map의 모든 요소를 포함한 Seq을 반환합니다 |
45 | def toSet: Set[A] Map의 모든 요소를 포함한 Set을 반환합니다 |
46 | def toString(): String 문자 객체를 반환합니다 |
더 많은 방법은 참조할 수 있습니다 API 문서