gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:22:43 24 4
gpt4 key购买 nike

我正在尝试解决 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com