2017-04-13 138 views
5

我不想重新发明轮子。只需查找一个函数,该函数将搜索字符串或字符串向量,并为找到匹配的每个元素返回true。这是我到目前为止所尝试的。R的grepl在朱莉娅

grepl(x::String, y)   = length(search(x, y)) > 0 
grepl(x::Vector{String}, y) = length.(search(x, y)) .> 0 
grepl(x::Vector{AbstractString}, y) = length.(search(x, y)) .> 0 

用法示例:

v = string.('a':'z') 
x = rand(v, 100) .* rand(v, 100) .* rand(v, 100) 
grepl(convert(Vector{String}, x), "z") 

那么,这将是一个工作的例子,如果我能得到我的类型才能正常工作。基本上我可以使用返回来选择其中只有"z"的元素。

+0

你能举一个快速的例子所需的输入/输出吗? –

回答

9

只需使用contains。上0.6,可以用点广播直接使用它:

julia> contains.(["foo","bar","baz"],"ba") 
3-element BitArray{1}: 
false 
    true 
    true 

上0.5,可以简单地包裹的第二个参数中的数组:contains.(["foo","bar","baz"],["ba"])

+0

我有时很难记住'contains(x,a)'是'x'是否包含'a',反之亦然。在这种情况下,使用'a⊆x'对我来说更加清楚。相当于上面的代码就是''ba“.⊆[”foo“,”bar“,”baz“]'。它不调用相同的代码,而是调用'issubset',但性能似乎相同。 – DNF

+0

请不理我以前的评论。 'issubset'不等于'contains'。例如''ba“⊆”abc“'返回'true'。 – DNF