D'abord, votre appel Array
constructor intérieur manque son second paramètre init
, le lambda où vous créez les premiers éléments que le Array
contiendra. Si vous, par exemple, voulez remplir tout avec le même élément, vous pouvez passer que comme paramètre:
fun <T> array2dim(sizeOuter: Int, sizeInner: Int, element: T): Array<Array<T>>
= Array(sizeOuter) { Array(sizeInner) { element } }
Vous pouvez également utiliser les indices extérieurs et intérieurs et créer des éléments initiaux basés sur ceux:
fun <T> array2dim(sizeOuter: Int,
sizeInner: Int,
createElement: (Int, Int) -> T): Array<Array<T>>
= Array(sizeOuter) { outerIndex ->
Array(sizeInner) { innerIndex ->
createElement(outerIndex, innerIndex)
}
}
Si vous n'avez rien pour initialiser votre Array
lorsque vous le créez, envisagez de créer un espace interne nul nul Array
s avec arrayOfNulls
.
Ils vous donneront toujours une erreur de ne pas être en mesure d'accéder T
- voir this answer à une question connexe pour l'explication, mais vous aurez besoin de marquer votre T
comme reified
(et, par conséquent, votre fonction inline
):
inline fun <reified T> array2dim(sizeOuter: Int, sizeInner: Int, element: T)
: Array<Array<T>>
= Array(sizeOuter) { Array(sizeInner) { element } }