如何在Scala 2.7.7中从Iterable创建一个数组?

时间:2010-10-31 06:04:20

标签: scala

我正在使用 Scala 2.7.7

我在访问文档方面遇到了困难,因此代码片段会很大。

上下文

我解析长度为4或16个字节的IP地址。我需要一个字节数组,以传递到java.net.InetAddress。 String.split(separator).map(_。toByte)的结果返回一个Iterable实例。

我看到两种解决问题的方法

  • 使用一个16字节长的数组,从Iterable中删除它并返回它的一部分,如果没有使用所有字段(是否有一个函数来填充2.7.7中的数组?如何获取该部分?)
  • 使用动态长度的容器并从中形成一个数组(哪个容器适合?)。

当前的实施发布在my other question about memory leaks

2 个答案:

答案 0 :(得分:2)

在Scala 2.7中,Iterable有一个名为copyToArray的方法。

答案 1 :(得分:1)

我强烈建议你不要在这里使用数组,除非你必须使用特定的库/框架然后需要一个数组。

通常情况下,使用原生Scala类型会更好:

String.split(separator).map(_.toByte).toList
//or
String.split(separator).map(_.toByte).toSeq

<强>更新

假设您的原始字符串是一个分隔的主机名列表,为什么不只是:

val namesStr = "www.sun.com;www.stackoverflow.com;www.scala-tools.com"
val separator = ";"
val addresses = namesStr.split(separator).map(InetAddress.getByName)

这会给你一个InetAddress个实例的迭代。