Kotlin에서 값으로 배열을 초기화하는 방법은 무엇입니까?


261

Java에서는 다음과 같은 배열을 초기화 할 수 있습니다.

int numbers[] = new int[] {10, 20, 30, 40, 50}

코 틀린의 배열 초기화는 어떻게 생겼습니까?


어쩌면 그냥 문서를 살펴보십시오 : kotlinlang.org/docs/reference/basic-types.html
khlr

6
문서는 다소 답을 숨 깁니다. 소스 코드 예제를 제공하는 대신 array()사이드 주석에서 (더 이상 사용되지 않는) 함수를 언급합니다 . 배열을 만들려면 라이브러리 함수 array ()를 사용하고 항목 값을 전달하여 array (1, 2, 3) )는 배열 [1, 2, 3]을 만듭니다.
Lars Blumberg

8
나는 Kotlin을 좋아하지만 "Kotlin documentation"은 충분하지 않다고 말합니다 (kotlinlang.org 이외의 다른 사이트에서 더 많은 것을 배웠습니다).
Hassan Tareq

1
또한 때때로 당신은 당신이 할 수있는 intRange를 원합니다 : val numbers = 1..51에서 5 사이의 정수 범위를 제공합니다.
Sylhare

답변:


313
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

자세한 내용은 Kotlin-기본 유형 을 참조하십시오.

이니셜 라이저 함수를 두 번째 매개 변수로 제공 할 수도 있습니다.

val numbers = IntArray(5) { 10 * (it + 1) }
// [10, 20, 30, 40, 50]

8
intArrayOf이상 사용하는 것이 바람직 arrayOf합니까? 따라서 IntArray장점이 Array<Int>있습니까?
Lars Blumberg

16
@LarsBlumberg IntArray는 int [], Array <Int>는 Integer []와 동일
user2235698

3
목록을 초기화하는 것은 매우 유사합니다.listOf(10, 20, 30, 40, 50)
Cristan

intArrayOf () 함수를 사용하면 직면 Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/KotlinPackage합니다. 저는 jdk1.8.0_241Intellij IDEA를 사용 하고 있습니다
TeachMeJava

92

가치는 코 틀린의 builtines를 사용하는 경우 (예를 들어 있음을 언급 intArrayOf(), longArrayOf(), arrayOf(), 등) 당신은 클래스 생성자에 따라 호출을 통해 초기화 할 필요가 대신 주어진 크기에 대한 기본 값으로 배열 (또는 원하는 값으로 모든 값)을 초기화 할 수 없습니다 .

// Array of integers of a size of N
val arr = IntArray(N)

// Array of integers of a size of N initialized with a default value of 2
val arr = IntArray(N) { i -> 2 }

9
람다를 사용하는 두 번째 기본값 init는 매우 도움이되었습니다! 감사합니다
rf43

9
초기화의 두 번째 형태는 다음 IntArray(N) {i -> 2}과 같이 쓸 수 있습니다 : 그리고 심지어 (상수로 초기화 할 때)IntArray(N) {2}
David Soroko

1
대신 "_"를 사용할 수 있습니다. var arr = IntArray (N) {_-> false}
Navas pk

1
람다가있는 것은 동적 크기와 선택 사항이 아닌 기본값으로 배열을 초기화하는 데 필요한 것입니다. 감사!
05

48

예를 들면 다음과 같습니다.

fun main(args: Array<String>) {
    val arr = arrayOf(1, 2, 3);
    for (item in arr) {
        println(item);
    }
}

놀이터 를 사용하여 언어 기능을 테스트 할 수도 있습니다 .


2
한 의견은 배열의 값을 인쇄하기 위해 loop. 대신 array.joinToString ( "")을 사용할 수 있습니다.
anticafe

2
작동하지만 외모는 더 자바 : 관용적 코 틀린에 비해 코 틀린 작성
m0skit0

47

코 틀린에는 몇 가지 방법이 있습니다.

var arr = IntArray(size) // construct with only size

그런 다음 사용자 나 다른 컬렉션 또는 원하는 곳에서 초기 값을 얻을 수 있습니다.

var arr = IntArray(size){0}  // construct with size and fill array with 0
var arr = IntArray(size){it} // construct with size and fill with its index

내장 함수와 같은 배열을 만들 수도 있습니다.

var arr = intArrayOf(1, 2, 3, 4, 5) // create an array with 5 values

또 다른 방법

var arr = Array(size){0} // it will create an integer array
var arr = Array<String>(size){"$it"} // this will create array with "0", "1", "2" and so on.

당신은 또한 사용할 수 있습니다 doubleArrayOf()또는 DoubleArray()대신 지능의 원시 형 또는.


var arr = IntArray(size, { it * 1 } )과 동일var arr = IntArray(size){it}
DET

30

코 틀린 우리가 사용하는 배열을 만들 수 있습니다 arrayOf(), intArrayOf(), charArrayOf(), booleanArrayOf(), longArrayOf()기능.

예를 들면 다음과 같습니다.

var Arr1 = arrayOf(1,10,4,6,15)  
var Arr2 = arrayOf<Int>(1,10,4,6,15)  
var Arr3 = arrayOf<String>("Surat","Mumbai","Rajkot")  
var Arr4 = arrayOf(1,10,4, "Ajay","Prakesh")  
var Arr5: IntArray = intArrayOf(5,10,15,20)  

코드가 무엇이고 주석이 무엇인지 명확히하기 위해이 답변을 다시 포맷하십시오.

6

오래된 질문이지만 범위를 사용하려면 다음을 수행하십시오.

var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()

다음과 거의 같은 결과를 얻습니다.

var numbers = Array(5, { i -> i*10 + 10 })

결과 : 10, 20, 30, 40, 50

첫 번째 옵션은 좀 더 읽기 쉽다고 생각합니다. 둘 다 작동합니다.


5

이 방법을 사용할 수 있습니다

var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)

var numbers = Array<Int>(5, { i -> 0 })

init는 기본값을 나타냅니다 (initialize)


1
initin Array<Int>()및의 예를 제공하면 IntArray()도움이되지만 지금은 대답이 크게 도움이되지 않습니다.
Lars Blumberg

답변이 수정되었습니다
Ali hasan

Array <Int>는 박스형 정수 배열을 제공하는 반면 IntArray는 실제 int 배열을 제공합니다.
Mike

4

- 예가 : 코 틀린 언어는 오버 헤드 권투없이 원시적 형의 배열을 나타내는 클래스를 전문으로하고 IntArray, ShortArray, ByteArray, 등 내가 필요는 이러한 클래스는 상위에는 상속 관계가 없다고 말할 Array클래스를,하지만 그들은 방법과 동일한 속성 세트가 있습니다. 그들 각각은 또한 해당 팩토리 기능을 가지고 있습니다. 따라서 Kotlin에서 값으로 배열을 초기화하려면 다음을 입력하면됩니다.

val myArr: IntArray = intArrayOf(10, 20, 30, 40, 50)

... 또는 이런 식으로 :

val myArr = Array<Int>(5, { i -> ((i+1) * 10) })

myArr.forEach { println(it) }                                // 10, 20, 30, 40, 50

이제 사용할 수 있습니다 :

myArr[0] = (myArr[1] + myArr[2]) - myArr[3]

도움이 되었기를 바랍니다.


3

언급 할 가치가 있고 설명서에서 충분히 직관적이지 않은 한 가지 생각은 팩토리 함수를 사용하여 배열을 만들고 크기를 지정하면 배열이 색인 값과 동일한 값으로 초기화된다는 것입니다. 예를 들어, 이와 같은 배열 : val array = Array(5, { i -> i })할당 된 초기 값은 [0,1,2,3,4]아닌 말한다 [0,0,0,0,0]. 그렇기 때문에 설명서에서 다음과 val asc = Array(5, { i -> (i * i).toString() })같은 답변을 얻을 수 있습니다.["0", "1", "4", "9", "16"]


3

다음과 같이 Int 배열을 만들 수 있습니다.

val numbers = IntArray(5, { 10 * (it + 1) })

5는 Int Array 크기입니다. 람다 함수는 요소 init 함수입니다. [0,4]의 'it'범위와 [1,5]의 1 make 범위

원산지 기능은 다음과 같습니다.

 /**
 * An array of ints. When targeting the JVM, instances of this class are 
 * represented as `int[]`.
 * @constructor Creates a new array of the specified [size], with all elements 
 *  initialized to zero.
 */
 public class IntArray(size: Int) {
       /**
        * Creates a new array of the specified [size], where each element is 
        * calculated by calling the specified
        * [init] function. The [init] function returns an array element given 
        * its index.
        */
      public inline constructor(size: Int, init: (Int) -> Int)
  ...
 }

Arrays.kt에 정의 된 IntArray 클래스


2

당신은 이것을 시도 할 수 있습니다 :

var a = Array<Int>(5){0}

2

다음 과 같이 기존 표준 라이브러리 방법 을 간단히 사용할 수 있습니다 .

val numbers = intArrayOf(10, 20, 30, 40, 50)

그래도 특수 생성자를 사용하는 것이 좋습니다.

val numbers2 = IntArray(5) { (it + 1) * 10 }

값을 초기화하는 방법을 설명하는 크기와 람다를 전달합니다. 설명서는 다음과 같습니다.

/**
 * Creates a new array of the specified [size], where each element is calculated by calling the specified
 * [init] function. The [init] function returns an array element given its index.
 */
public inline constructor(size: Int, init: (Int) -> Int)

2

아무도 왜 가장 간단한 답변을 제공하지 않았는지 궁금합니다.

val array: Array<Int> = [1, 2, 3]

내 원래의 답변에 대한 의견 중 하나에 따라 주석 인수에 사용될 때만 작동한다는 것을 깨달았습니다.

Kotlin은 주석 외부에서 배열 리터럴을 만들 수없는 것 같습니다.

예를 들어 args4j 라이브러리의 @Option을 사용하여이 코드를 살펴보십시오.

    @선택권(
        이름 = "-h",
        별명 = [ "--help", "-?"],
        usage = "이 도움말 표시"
    )
    var 도움말 : 부울 = false

옵션 인수 "aliases"는 유형입니다 Array<String>


2
이 코드에 다음과 같은 오류가 발생했습니다. 지원되지 않음 [주석 외부의 리터럴 리터럴]
Rémi P

나는 이것을 전에 본 적이 없다. 이 구문은 Kotlin에 새로운 것입니까?
Lars Blumberg

@LarsBlumberg, 아마 IntelliJ 2019.1에서 최근 Kotlin을 사용하기 시작했고 내가 보여준 것처럼 문자열 배열을 초기화했는데 작동했습니다
hdkrus

@ RémiP, 좋은 지적, 나는 주석 인수에 사용했습니다. 그러나 그것은 배열 리터럴이 일부 상황에서 작동하고 다른 상황에서는 작동하지 않는다는 것을 의미합니다.
hdkrus

1
@hdkrus 어노테이션에서 배열 초기화가 어떻게 작동하는지 보여주기 위해 답을 업데이트하지 않겠습니까? 이것은이 질문을 읽는 많은 독자들에게 가치가 있습니다.
Lars Blumberg

1

내 경우에는 서랍 항목을 초기화해야합니다. 아래 코드로 데이터를 채 웁니다.

    val iconsArr : IntArray = resources.getIntArray(R.array.navigation_drawer_items_icon)
    val names : Array<String> = resources.getStringArray(R.array.navigation_drawer_items_name)


    // Use lambda function to add data in my custom model class i.e. DrawerItem
    val drawerItems = Array<DrawerItem>(iconsArr.size, init = 
                         { index -> DrawerItem(iconsArr[index], names[index])})
    Log.d(LOGGER_TAG, "Number of items in drawer is: "+ drawerItems.size)

커스텀 모델 클래스

class DrawerItem(var icon: Int, var name: String) {

}

이것은 실제로 현명한 방법으로 질문에 대답하지 않습니다.
Qwerp-Derp

항목을 추가하기 위해 람다 기능을 사용한 주석을 확인하십시오.
Rahul

이것은 적어도 다른 답변과 비교 하여이 문제를 해결하는 복잡한 방법처럼 보입니다. 또한 이전 메시지를 보았는데 회고하면 가혹한 것 같습니다. 죄송합니다.
Qwerp-Derp

문제 없습니다. 방금 내 문제를 해결하는 방식으로 답변하려고했지만 다른 답변과 비교하지 않았습니다. 감사합니다!
Rahul

1

전역에서 int 배열 선언

var numbers= intArrayOf()

다음 onCreate 메소드는 값으로 배열을 초기화합니다.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //create your int array here
    numbers= intArrayOf(10,20,30,40,50)
}

이 코드는 질문에 대답 할 수 있지만,이 코드가 질문에 응답하는 이유 및 / 또는 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
rollstuhlfahrer

1

Java에서는 다음과 같은 배열을 초기화 할 수 있습니다.

int numbers[] = new int[] {10, 20, 30, 40, 50}

그러나 Kotlin에서 배열은 다음과 같은 여러 가지 방법으로 초기화되었습니다.

일반적인 배열 유형은 arrayOf () 함수를 사용할 수 있습니다 .

val arr = arrayOf(10, 20, 30, 40, 50)

val genericArray = arrayOf(10, "Stack", 30.00, 40, "Fifty")

Kotlin의 유틸리티 기능을 사용하여 배열을 초기화 할 수 있습니다

val intArray = intArrayOf(10, 20, 30, 40, 50)

1

간단한 방법 :

정수의 경우 :

var number = arrayOf <Int> (10, 20, 30, 40, 50)

모든 데이터 유형 유지

var number = arrayOf (10, "string value", 10.5)


0

이런 식으로 배열을 초기화하십시오. val paramValueList : Array<String?> = arrayOfNulls<String>(5)


0

이런 식으로 koltin에서 int 배열을 초기화 할 수 있습니다.

 val values: IntArray = intArrayOf(1, 2, 3, 4, 5,6,7)

이 코드는 질문에 대답 할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
레오 팔

0

내 대답은 @ maroun을 보완하며 다음은 배열을 초기화하는 몇 가지 방법입니다.

배열 사용

val numbers = arrayOf(1,2,3,4,5)

엄격한 배열을 사용하십시오

val numbers = intArrayOf(1,2,3,4,5)

혼합 유형의 행렬

val numbers = arrayOf(1,2,3.0,4f)

중첩 배열

val numbersInitials = intArrayOf(1,2,3,4,5)
val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))

동적 코드로 시작하는 기능

val numbers = Array(5){ it*2}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.