-1

我(scala 初学者)正在搜索,但我找不到解决以下问题的合适方法。

枚举对象(永不改变):

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 数组(case3):

"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不工作我希望他们如何工作。是否有更简单的方法来完成这项工作?

非常感谢。

4

2 回答 2

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
    }
  }
于 2013-08-28T10:00:04.290 回答
0

这不起作用的原因是,以这种方式使用的推导正在对您在括号中创建的 Range 实例进行 .foreach 调用(它返回 Unit 而不是您尝试返回的值):

(1 to (jsonArray.value.length - 1)).foreach{i => ...}

听起来您想要 Scala 中的集合提供的 forall 和 exists 方法的组合。

于 2013-08-26T09:39:11.540 回答