2017-04-13 2 views
5

Ich versuche nicht, das Rad neu zu erfinden. Suchen Sie einfach nach einer Funktion, die einen String oder einen String-Vektor durchsucht und für jedes Element, für das die Übereinstimmung gefunden wurde, den Wert true zurückgibt. Das habe ich bisher versucht.R's grepl in Julia

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 

Beispiel Nutzung:

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

Nun, wäre dies ein funktionierendes Beispiel, wenn ich meine Typen richtig arbeiten kann. Grundsätzlich könnte ich die Rückkehr verwenden, um nur Elemente auszuwählen, die "z" in ihnen haben.

+0

Können Sie ein kurzes Beispiel geben, gewünschte Eingabe/Ausgabe? –

Antwort

9

Verwenden Sie einfach contains. Auf 0,6, kann man es direkt mit Punkt-Rundfunk verwendet werden:

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

auf 0,5, kann man einfach das zweite Argument in einem Array Einschlag: contains.(["foo","bar","baz"],["ba"]).

+0

Ich habe manchmal Mühe, mich zu erinnern, wenn 'contains (x, a)' ist 'x' enthält' a' oder umgekehrt. In diesem Fall ist die Verwendung von "a ⊆ x" für mich klarer. Das Äquivalent des obigen Codes ist dann "ba" .⊆ ["foo", "bar", "baz"]]. Es nennt nicht denselben Code, sondern "issubset", aber die Leistung scheint identisch zu sein. – DNF

+0

Bitte ignorieren Sie meinen vorherigen Kommentar. 'issubset' ist nicht gleich' contains'. Zum Beispiel, "ba" ⊆ "abc" 'gibt' true' zurück. – DNF