arrays - Scala 将 IndexedSeq[AnyVal] 转换为 Array[Int]

标签 arrays scala

我正在尝试解决 Codility 的 GenomicRangeQuery使用 Scala,为此我编写了以下函数:

def solution(s: String, p: Array[Int], q: Array[Int]): Array[Int] = {
  for (i <- p.indices) yield {
    val gen = s.substring(p(i), q(i) + 1)
    if (gen.contains('A')) 1
    else if (gen.contains('C')) 2
    else if (gen.contains('G')) 3
    else if (gen.contains('T')) 4
  }
}

我没有做过很多测试,但它似乎解决了问题。

我的问题是 for 理解返回一个 scala.collection.immutable.IndexedSeq[AnyVal],而该函数必须返回一个 Array[Int],因此它会抛出类型不匹配错误

有没有办法让 for 理解返回 Array[Int] 或将 IndexedSeq[AnyVal] 转换为 Array[Int]

最佳答案

上面sheunis的回答大部分涵盖了它。

您可以通过调用 toArrayIndexedSeq 强制转换为 Array,因此第一位非常简单。对于第二部分,因为存在一个可能的逻辑分支,您可以在其中删除所有 if...else... 情况,因此您的 yield 可能会返回两者IntUnit 类型,其最接近的共同祖先是 AnyVal

请注意,如果您将 if... else... 替换为模式匹配,那么您将显式收到编译器警告,因为您没有捕获所有可能的情况.

生成匹配{ case _ if gen.contains("A") => 1 case _ if gen.contains("C") => 2 ... //抛出警告,除非你包含一个没有 `if` 子句的 `case _ =>` }

关于arrays - Scala 将 IndexedSeq[AnyVal] 转换为 Array[Int],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44064795/

相关文章:

c - itoa 函数不适用于单位数整数

c# - 如何使用 EWS 获取电子邮件的收件人

Android:将字符串数组从值传递到.java

scala - 对连续元素具有类型约束的列表

scala - 如何在带有加密密码的 Scala 中使用 Typesafe 的配置

JavaScript : How to delete array if we have a collection of element's properties

javascript - 如何将 Javascript foreach 循环与关联数组对象一起使用

scala - 使用可变变量编写 while 循环的函数式方法

mysql - 使用另一个表值更新表

scala - 如何使用结构化流从 Kafka 读取 JSON 格式的记录?