【发布时间】:2020-01-30 11:52:00
【问题描述】:
信息
我有一个 Item 类文件如下:
class Item(var color:String, var numValue:Int, var drawableID:Int){
init {
color = this.color
numValue = this.numValue
drawableID = this.drawableID
}
}
在主代码中,我创建了一个默认属性包含 104 个对象的数组:
var myItemClassArray = Array(104) { Item("", -99, -99) }
我的可绘制文件夹中还有图片,它们的 ID 位于 drawablesIDs:Array<Int> 数组中,它包含 53 个元素。
问题
我想分配我的 Item 属性,如下图所示:https://i.stack.imgur.com/wFVsn.png 我可以使用下面给出的代码来解决类似的问题(有 106 个对象和 53 个可绘制对象):
for (i in 0 until 106) {
if (i < 13) {
myItemClassList[i+2].color = "kirmizi"
myItemClassList[i+2].numValue = i+1
myItemClassList[i+2].drawableID = drawablesIDs[i+1]
} else if (i in 13..25) {
myItemClassList[i+2].color = "siyah"
myItemClassList[i+2].numValue = (i+1)-13
myItemClassList[i+2].drawableID = drawablesIDs[i+1]
} else if (i in 26..38) {
myItemClassList[i+2].color = "yesil"
myItemClassList[i+2].numValue = (i+1)-26
myItemClassList[i+2].drawableID = drawablesIDs[i+1]
} else if (i in 39..51) {
myItemClassList[i+2].color = "mavi"
myItemClassList[i+2].numValue = (i+1)-39
myItemClassList[i+2].drawableID = drawablesIDs[i+1]
} else if (i in 52..64) {
myItemClassList[i+2].color = "kirmizi"
myItemClassList[i+2].numValue = (i+1)-52
myItemClassList[i+2].drawableID = drawablesIDs[(i+1)-52]
} else if (i in 65..77) {
myItemClassList[i+2].color = "siyah"
myItemClassList[i+2].numValue = (i+1)-65
myItemClassList[i+2].drawableID = drawablesIDs[i+1-65+13]
} else if (i in 78..90) {
myItemClassList[i+2].color = "yesil"
myItemClassList[i+2].numValue = (i+1)-78
myItemClassList[i+2].drawableID = drawablesIDs[i+1-78+26]
} else if (i in 91..103) {
myItemClassList[i+2].color = "mavi"
myItemClassList[i+2].numValue = (i+1)-91
myItemClassList[i+2].drawableID = drawablesIDs[i+1-91+39]
} else {
myItemClassList[0].color = "sahte"
myItemClassList[0].drawableID = drawablesIDs[0]
myItemClassList[1].color = "sahte"
myItemClassList[1].drawableID = drawablesIDs[0]
}
}
有没有更简洁的方法来做到这一点?
可以使用 lambda 表达式来创建数组。例如:
val test = Array(28){i-> examples[i]}
这适用于一个“i”参数。但如果我想尝试这样的事情:
val test = Array(28){if(i<13)-> examples[i]}
它给了我一个错误,因为它的语法是错误的。
更简单的问题
假设我们有一个从 0 到 28 的数组,如下所示:
val testNumbers= Array(28){i->i}
现在我想使用 lambda 创建一个包含从 0 到 10 的数字的数组。 我该怎么做:
val player6 = Array(10){(it<10) -> testNumbers[it]} // gives an syntax error
【问题讨论】:
-
对于您的简单问题,简单回答。使用 .filter { 它
-
您可以使用
when语句,但它不会大大缩短此代码...
标签: android arrays kotlin lambda initialization