English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Map(映射)

Scala 집합

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)

Map 基本操作

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 合并

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

> #FF0000)

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:

www.taobao.com

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 메서드

다음 표는 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 문서

Scala 집합