在Julia中最简单的方法是用相同的参数调用函数C:\msys32\mingw32\include\boost\algorithm\string\compare.hpp|43|error: no match for 'operator==' (operand types are 'const boost::asio::mutable_buffer' and 'const boost::asio::const_buffer')|
次并返回数组中的最简单方法?例如,我想获得一个随机字符串数组,每个字符串都有一定的长度。我能想到的最好的方法是
boost::algorithm::ends_with()
另一种替代方法是使用广播,如下所示:
n
但是,我更喜欢julia> map(_ -> randstring(4), 1:6)
6-element Array{String,1}:
"xBWv"
"CxJm"
"KsHk"
"UUIP"
"64o4"
"QNgm"
之类的语法。为了进行比较,在R中,我将执行以下操作:
# Broadcast over an array of 4's
randstring.(fill(4, 6))
# Broadcast over an iterator that repeats the number 4 six times
using Base.Iterators
randstring.(repeated(4, 6))
答案 0 :(得分:10)
我愿意
using Random
six_randstrings = [randstring(4) for _ in 1:6]
答案 1 :(得分:4)
如果您不满意直接使用map
或数组推导,则可以为此创建一个宏:
macro replicate(ex, n)
return :(map(_ -> $(esc(ex)), 1:$(esc(n))))
end
@replicate(rand(), 4)
答案 2 :(得分:1)
虽然有一些方法可以在不引入软件包依赖关系的情况下进行操作,但是Lazy.jl确实提供了许多此类功能强大的工具。
特别是你说的
我的偏好是使用诸如copy(randstring(4),6)这样的语法
首先,请注意,这并不是完全“调用函数n
次,因为randstring(4)
不是函数,它会被求值。
因此,您想调用匿名函数n
次,以与等式标题对齐,在这种情况下,首选语法为replicate(()->randstring(4),6)
好消息! Lazy.jl
通过功能repeatedly
提供了几乎完全相同的语法。唯一的区别是它以n
作为第一个参数:
repeatedly(6,()->randstring(4))
要注意的另一个区别是,由于其他原因,它返回的是LazyList
类型,而不是Array
。
现在,很可能您不会注意到其中的区别,例如您可以像List
一样索引并广播到Array
。
但是,如果您不打算利用任何不错的Lazy
属性,并且确实需要将其变成Array
,则可以直接将List
解压缩到Array
。
这是一个完整的例子:
using Random
using Lazy
stringlist = repeatedly(6,()->randstring(4))
stringarray = [stringlist...]