web-dev-qa-db-ja.com

Kotlinで配列を値で初期化する方法

Javaでは、配列は次のように初期化できます。

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

Kotlinの配列初期化はどのように見えますか?

180
Lars Blumberg
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

詳細は Kotlin - 基本型 を参照。

209
Maroun

Kotlinの組み込み関数(例えば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 }
54
vtor

これが例です:

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

遊び場 を使って言語機能をテストすることもできます。

39
shadeglare

コトリンではいくつかの方法があります。

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 * 1 } ) // 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.

Intの代わりにdoubleArrayOf()DoubleArray()、あるいはあらゆるプリミティブ型を使うこともできます。

32
HM Nayem

Kotlinでは、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)  
19
RS Patel

昔の質問ですが、範囲を使いたいのなら:

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

ほぼ同じ結果が得られます。

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

結果:10、20、30、40、50

最初の選択肢はもう少し読みやすいと思います。両方ともうまくいきます。

5
Brooks DuBois

あなたはこの方法を使うことができます

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はデフォルト値を表します(初期化)。

5
Ali hasan

このようにInt配列を作成することができます。

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

5はInt配列サイズです。ラムダ関数は要素init関数です。 [it]の範囲は[0,4]で、1の範囲は[1,5]の範囲です。

原点関数は次のとおりです。

 /**
 * 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クラス

3
zyc zyc

言及する価値があり、ドキュメントから直感的に理解できないことの1つは、ファクトリ関数を使用して配列を作成し、そのサイズを指定すると、その配列はインデックス値と等しい値で初期化されることです。たとえば、次のような配列では、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
Alf Moh

以下に示すように、単に既存の標準ライブラリ methods を使用できます。

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
s1m0nw1

これを試すことができます:

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

私はなぜ誰もが最も単純な答えを与えなかったのかと思います。

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

私の最初の答えに対するコメントの一つとして、私はこれがアノテーション引数で使われたときにだけうまくいくことを実感しました(これは私にとって本当に予想外でした)。

Kotlinはアノテーションの外側に配列リテラルを作成することを許可していないようです。

たとえば、args4jライブラリの@Optionを使って次のコードを見てください。

 
 @Option([.____。name = "-h"、
エイリアス= ["--help"、 " - ?"]、
 usage = "このヘルプを表示する" 
)
 var help:Boolean = false 
 

オプション引数 "aliases"はArray<String>型です。

1
hdkrus

Kotlin言語には、ボクシングのオーバーヘッドなしにプリミティブ型の配列を表すための特殊なクラスがあります。たとえば - IntArrayShortArrayByteArrayなど。これらのクラスは、親の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]

お役に立てれば。

1
ARGeo

グローバルに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)
}
1
Nihal Desai

私の場合、私は自分の引き出しアイテムを初期化する必要があります。以下のコードでデータを埋めます。

    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) {

}
1
Rahul

このようにして配列を初期化します。val paramValueList : Array<String?> = arrayOfNulls<String>(5)

0
Abhilash Das