类类型作为在Scala中的地图中的键

编程入门 行业动态 更新时间:2024-10-10 00:27:28
本文介绍了类类型作为在Scala中的地图中的键的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的游戏有

class Enemy 谁是AI /功能我可以改变

trait移动 trait VerticalMover扩展移动 trait RandomMover扩展移动

等。现在我需要基于trait获取预加载的东西。我想做的是有一个地图,接受所有的traits,扩展移动作为键,然后一些EnemyContainer作为值将具有trait相关内容预加载。

但是如何我定义这样的地图,以及如何格式化我的.get()来获取容器的一些敌人的实例。像:

val myEnemy = new Enemy with RandomMover val myDetails:EnemyContainer = enemyDetailsS​​tore.get(myEnemy.getClass )

解决方案

Map [Class [_< ;: Moving],EnemyDetails] 类型。我怀疑像:

//给出一个Map [Class [_< ;: Moving],EnemyDetails]键 enemyDetailsS​​tore.filterKeys(_ isInstance myEnemy)

或:

// Iterable [EnemyDetails] enemyDetailsS​​tore collect {case(c,d)if c isInstance myEnemy => d}

或者只是:

//选项[EnemyDetails] enemyDetailsS​​tore collectFirst {case(c,d)if c isInstance myEnemy => d}

会为你做。这个代码的唯一问题是它是O(N),因为它需要一个遍历的地图,而不是简单的查找,这将是O(1)或O(log N)

My game has

class Enemy

who's AI/functionality I can change with

trait Moving trait VerticalMover extends Moving trait RandomMover extends Moving

and so on. Now I need to fetch preloaded stuff based on trait. What I would like to do is have a Map that accepts all traits that extend Moving as keys and then some EnemyContainer as value that would have trait related content preloaded.

But how do I define such a Map and how do format my .get() to get the container by an instance of some Enemy. Something like:

val myEnemy = new Enemy with RandomMover val myDetails:EnemyContainer = enemyDetailsStore.get(myEnemy.getClass)

解决方案

Well, I assume that your enemy details store is of type Map[Class[_ <: Moving], EnemyDetails]. I suspect that something like:

//gives a Map[Class[_ <: Moving], EnemyDetails] for all matching keys enemyDetailsStore.filterKeys(_ isInstance myEnemy)

Or:

//Iterable[EnemyDetails] enemyDetailsStore collect { case (c, d) if c isInstance myEnemy => d }

Or even just:

//Option[EnemyDetails] enemyDetailsStore collectFirst { case (c, d) if c isInstance myEnemy => d }

Will do for you. The only "issue" with this code is that it's O(N), in that it requires a traversal of the map, rather than a simple lookup, which would be O(1), or O(log N)

更多推荐

类类型作为在Scala中的地图中的键

本文发布于:2023-11-25 17:56:30,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1630749.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图中   类型   Scala

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!