如何从Scala 2.7.7中的Iterable创建数组?

如何从Scala 2.7.7中的Iterable创建数组?,scala,Scala,我正在使用Scala 2.7.7 我在访问文档时遇到了困难,因此代码片段可能会比较大 上下文 我解析长度为4或16字节的IP地址。我需要一个字节数组,以传递到java.net.InetAddress。String.split(separator.map(u.toByte)的结果返回一个Iterable实例 我认为有两种方法可以解决这个问题 使用一个长度为16字节的数组,从Iterable中填充,如果没有使用所有字段,则只返回其中的一部分(2.7.7中是否有填充数组的函数?如何获取该部分?) 使

我正在使用Scala 2.7.7

我在访问文档时遇到了困难,因此代码片段可能会比较大

上下文

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

我认为有两种方法可以解决这个问题

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

当前的实现发布于。

在Scala 2.7中,有一个名为
copyToArray
的方法,我强烈建议您不要在此处使用数组,除非您必须使用特定的库/框架,然后需要数组

通常,您最好使用本机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)

这将为您提供一个iterable of
InetAddress
实例。

如何截断数组以仅返回已使用的单元格?java.net.InetAddress.getByAddress(byte[]addr)需要字节数组