我有一个
val map = Map<String,String>
map.put("Nurseiyt","android")
我想通过 subString 获取一个值,例如:
map["Nurs"]
应该返回 "android"
这可能吗?
最佳答案
使用kotlin.Collections,有filter
之类的方法。
有两件事 - 最好使用正则表达式。因此,您甚至可以更好地控制返回的内容。第二个,可以有多个元素与该正则表达式匹配。这就是我返回列表的原因。
fun <T> substringKey(map: Map<String, T>, regex: Regex): List<T> {
return map.filter { it.key.contains(regex) }
.map { it.value }
}
如果您想使用该表示法,您需要创建自己的 map 并覆盖适当的运算符。值得注意的是,你不能返回值列表。因此,在这种情况下,我只返回第一个找到的值。
class SubstringMap<V> : HashMap<String, V>() {
override operator fun get(key: String): V? {
return this.entries.first { it.key.contains(key) }.value
}
}
fun main() {
val map = SubstringMap<String>()
map["Nurseiyt"] = "android"
println(map["Nurs"]) // "android"
}
最后一件事 - 在 kotlin 中,您可以创建自己的运算符,例如 withKeyPart
。这比覆盖默认运算符要好得多(因为我不希望 []
运算符以与平常不同的方式工作。
infix fun <V> Map<String, V>.withKeyPart(keyPart: String): List<V> {
return this.filter { it.key.contains(keyPart) }
.map { it.value }
}
然后这样调用它:
fun main() {
val map = HashMap<String, String>()
map withKeyPart "KeyPart" // infix notation
map.withKeyPart("KeyPart") // standard call
}
关于kotlin - 检查映射是否包含子字符串。 Kotlin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57704099/