Javaでは、配列は次のように初期化できます。
int numbers[] = new int[] {10, 20, 30, 40, 50}
Kotlinの配列初期化はどのように見えますか?
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
詳細は Kotlin - 基本型 を参照。
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 }
これが例です:
fun main(args: Array<String>) {
val arr = arrayOf(1, 2, 3);
for (item in arr) {
println(item);
}
}
遊び場 を使って言語機能をテストすることもできます。
コトリンではいくつかの方法があります。
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()
、あるいはあらゆるプリミティブ型を使うこともできます。
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)
昔の質問ですが、範囲を使いたいのなら:
var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()
ほぼ同じ結果が得られます。
var numbers = Array(5, { i -> i*10 + 10 })
結果:10、20、30、40、50
最初の選択肢はもう少し読みやすいと思います。両方ともうまくいきます。
あなたはこの方法を使うことができます
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はデフォルト値を表します(初期化)。
このように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クラス
言及する価値があり、ドキュメントから直感的に理解できないことの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"]
の答えを出す理由です。
以下に示すように、単に既存の標準ライブラリ 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)
これを試すことができます:
var a = Array<Int>(5){0}
私はなぜ誰もが最も単純な答えを与えなかったのかと思います。
val array: Array<Int> = [1, 2, 3]
私の最初の答えに対するコメントの一つとして、私はこれがアノテーション引数で使われたときにだけうまくいくことを実感しました(これは私にとって本当に予想外でした)。
Kotlinはアノテーションの外側に配列リテラルを作成することを許可していないようです。
たとえば、args4jライブラリの@Optionを使って次のコードを見てください。
@Option([.____。name = "-h"、 エイリアス= ["--help"、 " - ?"]、 usage = "このヘルプを表示する" ) var help:Boolean = false
オプション引数 "aliases"はArray<String>
型です。
Kotlin言語には、ボクシングのオーバーヘッドなしにプリミティブ型の配列を表すための特殊なクラスがあります。たとえば - 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]
お役に立てれば。
グローバルに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)
}
私の場合、私は自分の引き出しアイテムを初期化する必要があります。以下のコードでデータを埋めます。
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) {
}
このようにして配列を初期化します。val paramValueList : Array<String?> = arrayOfNulls<String>(5)