朱莉娅的功能是否与R paste()
功能相似?特别是,如果我们给函数赋予两个向量,它将返回一个带有两个输入向量的逐元连接的向量。
我环顾四周,似乎无法在文档或其他方面找到答案。 John Myles White的An older post表明Julia的join()
函数是最接近的模拟函数,但它似乎仅对字符串对有效,而不是对字符串向量进行元素处理。
现在,我只是使用下面的函数来循环调用join()
的元素,但我想知道是否有更好的方法。
x = ["aa", "bb", "cc"]
y = ["dd", "ee", "ff"]
function mypaste(v1, v2)
n = length(v1)
res = Array{ASCIIString}(n)
for i = 1:n
res[i] = join([v1[i], v2[i]])
end
return res
end
mypaste(x, y)
运行mypaste()
会根据需要为我们提供输出。
3-element Array{ASCIIString,1}:
"aadd"
"bbee"
"ccff"
有没有好的选择?我误解了join()
功能吗?
答案 0 :(得分:9)
我认为我根本不会使用join
。 Join用于在一个集合中组合字符串;在两个不同集合中串联字符串之后。因此,虽然使用join
创建zip
所需的临时集合非常简单(且高效),但您可以使用string
函数或乘法来避免它:
julia> map(string, x, y)
3-element Array{ASCIIString,1}:
"aadd"
"bbee"
"ccff"
julia> map(*, x, y)
3-element Array{ASCIIString,1}:
"aadd"
"bbee"
"ccff"
更好(但可能太聪明了一半),广播元素乘法运算符.*
:
julia> x .* y
3-element Array{ASCIIString,1}:
"aadd"
"bbee"
"ccff"
答案 1 :(得分:4)
您可以使用列表推导和zip
来获取对:
julia> x = ["aa", "bb", "cc"];
julia> y = ["dd", "ee", "ff"];
julia> [join(i) for i=zip(x,y)]
3-element Array{ByteString,1}:
"aadd"
"bbee"
"ccff"
答案 2 :(得分:4)
map
。单行是map(join,zip(x,y))
。如下例所示,它还添加了z
:
julia> x = ["aa","bb","cc"];
julia> y = ["dd","ee","ff"];
julia> z = ["gg","hh","ii"];
julia> map(join,zip(x,y,z))
3-element Array{Any,1}:
"aaddgg"
"bbeehh"
"ccffii"
(参见@DSM答案列表理解)