Юлия: как объединить символы вектора вместе (["a", "b", "c"] -> "abc") - PullRequest
0 голосов
/ 28 августа 2018

Как объединить символы или строки в векторе вместе в одну строку, чтобы ["a", "b", "c"] стало "abc"?

Я пробовал с vcat, hcat, но, похоже, ничего не работает ... Спасибо

Ответ

join(["a", "b", "c"])

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Существует множество способов объединения вектора строк:

  • join функция
  • string функция
  • * объединенная функция

как показано различными комментариями.

Однако подписи для этих функций не идентичны. Сначала я этого не заметил, и кто-то еще новичок в Джулии может оценить детали.

julia> j = join(a)
"abc"

julia> s = string(a...)
"abc"

julia> m = *(a...)
"abc"

# When called correctly all three functions return equivalent results.
julia> j == s == m
true

Однако , когда кто-то, как и я, является новичком в Джулии, они могут не сразу признать (я не) критическую важность ... для строки string и * объединенные функции, в отличие от функции join.

Например:

julia> s2 = string(a)
"[\"a\", \"b\", \"c\"]"

julia> s == s2
false

# or simply:
julia> join(a) == string(a)
false

В чем разница между s = join(a) и s2 = string(a)?

# Note that join(a) produces a string of 3 letters, "abc".
julia> length(s)
3

# string(a) produces a string of punctuation characters with the letters.
julia> length(s2)
15

julia> s[1]
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

julia> s2[1]
'[': ASCII/Unicode U+005b (category Ps: Punctuation, open)

julia> s[1:3]
"abc"

julia> s2[1:3]
"[\"a"

Функция конкатенации *() также сильно отличается от функции join:

julia> a = ["a", "b", "c"]
3-element Array{String,1}:
 "a"
 "b"
 "c"

julia> j = join(a)
"abc"

julia> m = *(a)
ERROR: MethodError: no method matching *(::Array{String,1})

julia> m = *(a...)
"abc"

Таким образом, оператор "splat", ..., который используется для применения функции к последовательности аргументов, имеет решающее значение для string и *, но не для join.

Фактически, функция join с оператором "splat" делает то, что вы, вероятно, не хотите:

julia> join(a...)
"a"
0 голосов
/ 28 августа 2018

a = ["a", "b", "c"]; string(a...)

join(["a", "b", "c"])

...