我(scala初学者)正在搜索,但我找不到合适的方法来解决以下问题。
Enumeration对象(永不改变):
object EyeColorEnum extends Enumeration{
val Blue = Value("blue")
val Brown = Value("brown")
val Gray = Value("gray")
val Green = Value("green")
}
Json数组(case1):
"eyeColor": ["blue", "gray", "green"]
Json数组(case2):
"eyeColor": []
Json数组(案例3):
"eyeColor": ["orange", "pink", "green"]
此解决方案应该是“eyeColor”字段的json验证。
案例1和案例2有效。
案例3无效。
for (i <- 1 to(jsonArray.value.length - 1)) {
for (j <- 1 to(jsonArray.value.length - 1)) {
if(jsonArray(i).as[String] == enumArray(j).toString) {
// Item from A exists in B
true
} else {
// Item from A does not exist in B
checker = checker + 1
}
}
}
这些for
不起作用,我希望它们如何工作。
是否有更简单的方法可以完成这项工作?
非常感谢你。
答案 0 :(得分:0)
这不起作用的原因在于,以这种方式使用的理解是对.pare中创建的Range实例进行.foreach调用(返回Unit而不是您尝试返回的值):
(1 to (jsonArray.value.length - 1)).foreach{i => ...}
听起来你想要一个spalal和scala中的集合提供的存在方法的组合。
答案 1 :(得分:0)
是否有人可以指出如何避免var
?
这是我难看的解决方案:
def apply(enum: Enumeration, jsonArray: JsArray): Boolean = {
val enumArray = enum.values.toArray
var found = 0
jsonArray.value.length match {
case 0 => true
case _ =>
(0 to (jsonArray.value.length - 1)).foreach{i =>
(0 to (enumArray.length - 1)).foreach{j =>
if (jsonArray(i).as[String] == enumArray(j).toString) {
found +=1
}
}
}
found == jsonArray.value.length
}
}