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

Scala 배열

Scala 언어에서 제공하는 배열은 고정 크기의 동일한 타입의 요소를 저장하는 데 사용되며, 배열은 모든 프로그래밍 언어에서 중요한 데이터 구조 중 하나입니다。

배열 변수를 선언하는 것은 number0, number1、...、number99 단일 변수를 선언하는 것이 아니라 numbers와 같은 변수를 선언한 후 numbers[0]、numbers[1]、...、numbers[99]를 사용하여 각각의 단일 변수를 나타냅니다. 배열의 특정 요소는 인덱스를 통해 접근됩니다。

배열의 첫 번째 요소 인덱스는 0이며, 마지막 요소 인덱스는 요소 총 수에서1。

배열 선언

아래는 Scala 배열 선언 문법 형식입니다:

var z:Array[String] = new Array[String](3)
또는
var z = new Array[String](3)

이 문법에서 z는 문자열 타입의 배열을 선언하며, 배열의 길이는 3 ,可存储 3 개의 요소. 각 요소에 값을 설정하고, 인덱스를 통해 각 요소에 접근할 수 있습니다. 예를 들어:

z(0)    =    "w3codebox";    z(1)    =    "Baidu";    z(4/2)    =    "Baidu";    z(

) = "Google" 4/2 INDEX로 사용됩니다 z(2) = "Google"

다음과 같은 방식으로도 배열을 정의할 수 있습니다:

var    z    =    Array("w3codebox", "Baidu", "Google")

아래는 길이가 10 의 배열 myList는 인덱스值为 0 到 9:

배열 처리

배열의 요소 타입과 배열의 크기는 모두 결정되어 있기 때문에, 배열 요소를 처리할 때는 일반적인 for 루프를 사용합니다.

다음 예제는 배열의 생성, 초기화 등 처리 과정을 보여줍니다:

object Test {
   def main(args: Array[String]) {
      var    myList    =    Array(1.9, 2.9, 3.4, 3.5)
      
      // 모든 배열 요소를 출력합니다
      for ( x <- myList    )    {
         println(    x    )
      }
      // 计算数组所有元素的总和
      var    total    =    0.0;
      for    (    i    <- 0    to    (    myList.length - 1))    {
         total +=    myList(i);
      }
      println("总和为 ") + total);
      // 查找数组中的最大元素
      var    max    =    myList(0);
      for    (    i    <- 1 to    (    myList.length - 1)    )    {
         if    (    myList(i)    >    max)    max    =    myList(i);
      }
      println("최대值为 ") + max);
    
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
总和为 11.7
최대值为 3.5

다차원 배열

다차원 배열은 하나의 배열의 값이 다른 배열일 수 있으며, 다른 배열의 값도 배열일 수 있습니다. 행렬과 테이블은 우리가 흔히 사용하는 이차원 배열입니다.

위는 이차원 배열을 정의한 예제입니다:

val    myMatrix    =    Array.ofDim[Int](3, 3)

예제에서 배열에는 세 개의 배열 요소가 포함되어 있으며, 각 배열 요소는 또 다른 세 가지 값을 가집니다.

다음은 이차원 배열 처리의 전체 예제입니다:

import Array._
object Test {
   def main(args: Array[String]) {
      val    myMatrix    =    Array.ofDim[Int](3, 3)
      
      // 행렬을 생성합니다
      for    (    i    <- 0    to 2) {
         for    (    j    <- 0    to 2) {
            myMatrix(i)(j)    =    j;
         }
      }
      
      // 이차원 배열을 출력합니다
      for    (    i    <- 0    to 2) {
         for    (    j    <- 0    to 2) {
            print("    ") + myMatrix(i)(j));
         }
         println();
      }
    
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala
$ scala Test
0 1 2
0 1 2
0 1 2

배열을 병합합니다

다음 예제에서는 concat() 메서드를 사용하여 두 개의 배열을 합치는 방법을 보여줍니다. concat() 메서드는 여러 배열 파라미터를 받아들입니다:

import Array._
object Test {
   def main(args: Array[String]) {
      var myList1 =    Array(1.9, 2.9, 3.4, 3.5)
      var myList2 =    Array(8.9, 7.9,    0.4, 1.5)
      var myList3 =    concat(    myList1,    myList2)
      
      // 모든 배열 요소를 출력합니다
      for ( x <- myList3 ) {
         println(    x    )
      }
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala
$ scala Test
1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5

구간 배열을 생성합니다

다음 예제에서는 range() 메서드를 사용하여 区間 범위의 배열을 생성했습니다. range() 메서드의 마지막 매개변수는 단계입니다. 기본 단계는 1:

import Array._
object Test {
   def main(args: Array[String]) {
      var myList1 = range(10, 20, 2)
      var myList2 = range(10,20)
      // 모든 배열 요소를 출력합니다
      for ( x <- myList1 ) {
         print( " " + x )
      }
      println()
      for ( x <- myList2 ) {
         print( " " + x )
      }
   }
}

위 코드를 실행하면, 출력 결과는 다음과 같습니다:

$ scalac Test.scala
$ scala Test
10 12 14 16 18
10 11 12 13 14 15 16 17 18 19

Scala 배열 메서드

다음 표는 Scala 언어에서 배열을 처리하는 중요한 메서드들로, 사용하기 전에 import Array._ 패키지를 도입합니다.

순번메서드와 설명
1

def apply( x: T, xs: T* ): Array[T]

지정된 객체 T의 배열을 생성합니다,  T의 값은 Unit, Double, Float, Long, Int, Char, Short, Byte, Boolean일 수 있습니다.

2

def concat[T]( xss: Array[T]* ): Array[T]

배열을 병합합니다

3

def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit

한 배열을 다른 배열에 복사합니다. Java의 System.arraycopy(src, srcPos, dest, destPos, length)과 동일합니다.

4

def empty[T]: Array[T]

0 길이의 배열을 반환합니다

5

def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T]

지정된 길이의 배열을 반환하며, 각 배열 요소는 지정된 함수의 반환 값입니다.

위 예제의 배열 초기 값은 0이며, 길이는 3,계산 함수는a=>a+1

scala> Array.iterate(0,3)(a=>a+1)
res1: Array[Int] = Array(0, 1, 2)
6

def fill[T]( n: Int )(elem: =>  T): Array[T]

배열을 반환하며, 각 요소는 두 번째 매개변수로 채워집니다.

7

def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]]

지정된 길이의 배열을 반환하며, 각 요소는 두 번째 매개변수로 채워집니다.

8

def ofDim[T]( n1: Int ): Array[T]

지정된 길이의 배열을 생성합니다

9

def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]

양차원 배열을 생성합니다

10

def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]]

삼차원 배열을 생성합니다

11

def range( start: Int, end: Int, step: Int ): Array[Int]

지정된 区간 내의 배열을 생성하며, step은 각 요소 간의 단계입니다

12

def range( start: Int, end: Int ): Array[Int]

지정된 区間 내의 배열을 생성합니다

13

def tabulate[T]( n: Int )(f: (Int)=> T): Array[T]

지정된 길이의 배열을 반환하며, 각 배열 요소는 지정된 함수의 반환 값으로, 기본적으로 0에서 시작합니다.

위의 예제는 반환 3 요소 수:

scala> Array.tabulate(3)(a => a + 5)
res0: Array[Int] = Array(5, 6, 7)
14

def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]]

지정된 길이의 양차원 배열을 반환하며, 각 배열 요소는 지정된 함수의 반환 값으로, 기본적으로 0에서 시작합니다.