我正在写一个基本的应用程序来帮助我的周一之夜5号球队每周更新我们的统计数据.包括进球、助攻和我们多少次将球踢过栅栏.

我已经创建了一个数据类来表示每个球员,这需要根据用户输入进行更新.

 data class player(
    val name: String = "",
    var goals: Int = 0,
    var assists: Int = 0
    )

val TestPlayerName:String = "Bob"
val GoalsOrAssists:String = "goals"
    
fun main() {

    var Team: List <player> =   listOf(
        
            player(name="Dave", goals=0, assists=0), 
            player(name="Bob",  goals=0, assists=0), 
            player(name="Barry", goals=0, assists=0), 
            player(name="Bill", goals=0, assists=0)
    )

    
    Team.forEach { player ->
        if(player.name == TestPlayerName){
            player.goals =+ 1
        }
    }
    println(Team)
}

上面的代码正确地打印出Bob已经进了一个球……

[player(name=Dave, goals=0, assists=0), 
player(name=Bob, goals=1, assists=0), 
player(name=Barry, goals=0, assists=0), 
player(name=Bill, goals=0, assists=0)]

但我正在努力寻找如何将变量传递到组合中,因为进球或助攻都需要根据用户的输入进行动态更新.比如...

Team.forEach { player ->
        if(player.name == TestPlayerName){
            player.**insertVariableHere** += 1
        }
    }

任何非常感谢的建议:)

推荐答案

如果它只有两个变量,我更喜欢使用Boolean,然后只需判断它并根据它的值设置不同的属性.

var isAssist = true

...
// please follow naming conventions!
team.forEach { player ->
    if(player.name == testPlayerName){
        if (isAssist) {
            player.assists += 1
        } else {
            player.goals += 1
        }
    }
}

如果您有很多想要这样做的属性,并且为所有内容编写if个用例最终会非常长,那么您可以将goalsOrAssists设置为KMutableProperty1<Player, Int>类型.

data class Player(
   val name: String = "",
   var goals: Int = 0,
   var assists: Int = 0
)

val testPlayerName:String = "Bob"
val goalsOrAssists: KMutableProperty1<Player, Int> = 
    Player::goals
    // or
    Player::assists

然后可以使用getset方法设置它:

team.forEach { player ->
    if(player.name == testPlayerName){
        goalsOrAssists.set(player, goalsOrAssists.get(player) + 1)
    }
}

Kotlin相关问答推荐

Kotlin和JavaFX:绑定行为奇怪

如何编写带有依赖项的自定义Kotlin串行化程序?

使用另一个对象的列表创建对象

jOOQ Kotlin Coroutines - Select all and exists查询

如何修改muableStateMapOf的值?

为什么不';Kotlin是否在数据类构造函数中隐式分配null值可为null的字段?

为什么 Kotlin 中没有 init 块的注释

从 Kotlin 的父类获取函数注解

通过快捷键手动砍掉功能参数等

修改器的属性是什么,我需要更改以使角变圆且宽度更小?喷气背包组合

Kotlin 可空泛型

使用事务时未调用 Kafka ConsumerInterceptor onCommit

如果不在可组合函数中,如何获取 stringResource

Android 导航组件 - 向上导航打开相同的片段

无法从 XML 访问 NavHostFragment

IntentService (kotlin) 的默认构造函数

Kotlin 中的数据类

Kotlin get字段注释始终为空

Kotlin 的 Double.toInt() 中使用了哪种方法,舍入还是截断?

可以在函数参数中使用解构吗?