如何从字符串转换为数组?

Abh*_*ith 9 julia

如果s = "1 2 3 4 5",我们怎么能从中获得一个整数数组.我想返回一个5元素Array{Int64,1} [1; 2; 3; 4; 5].

Dav*_*ers 11

正如使用@isebarn,split(s)将字符串拆分为单词(默认情况下在空格处拆分)非常有用:

julia> s = "1 2 3 4 5"
"1 2 3 4 5"

julia> split(s)
5-element Array{SubString{String},1}:
 "1"
 "2"
 "3"
 "4"
 "5"
Run Code Online (Sandbox Code Playgroud)

现在你可以使用数组理解:

[parse(Int, ss) for ss in split(s)]
Run Code Online (Sandbox Code Playgroud)

在这里,parse(Int, ss)将字符串解析ss为整数.

另请注意,这会返回一维向量,而不是二维数组.这里没有理由更喜欢二维数组 - 这是一个自然的一维对象.


DNF*_*DNF 11

如果您使用的是0.5或更高版本,则还可以执行以下操作:

int_s = parse.(split(s))
Run Code Online (Sandbox Code Playgroud)

尾随点是新的紧凑广播符号.可能,这将是未来版本中的首选语法.


ise*_*arn 5

int_s = map(x -> parse(x), split(s))
Run Code Online (Sandbox Code Playgroud)

编辑

或者@David P. Sanders建议,我同意

int_s = map(parse, split(s))
Run Code Online (Sandbox Code Playgroud)

我已经省略了Int部分因为我不知道你是否计划在你的字符串中只有整数

  • 请注意,您可以(并且应该)将其写为“map(parse, split(s))” (2认同)
  • 您正在创建一个新函数,它包装旧函数并执行完全相同的操作.我不认为这会被优化掉(虽然可能),所以这会慢一点.它也使它看起来像一个更复杂的东西,而实际上你只是`map`ping`parse`.您可以将我的答案重写为`map(x-> parse(Int,x),split(s))`; 在这里你需要定义匿名函数,因为你不能直接映射`parse(int,x)`函数,因为它有两个参数,而不是一个.我仍然觉得阵列理解更容易理解 (2认同)