Юлия: Функциональное программирование: проверка записей массива по другому массиву значений - PullRequest
5 голосов
/ 18 марта 2020

Я пытаюсь создать один лайнер, который фильтрует массив по массиву значений. Это означает, что я хочу пройтись по каждому элементу A и сравнить с элементами B.

Например: что можно пить?

A = ["water";"beer";"ammonia";"bleach";"lemonade"]
B = ["water";"beer"; "lemonade"]

Я собрал воедино это чудовище, но, Я надеюсь, что у кого-то есть более элегантный подход:

julia> vcat(filter(w->length(w)!= 0, map(y->filter(z->z!="",(map(x-> begin x==y ? x = y : x = ""  end,B))),A))...)
3-element Array{String,1}:
 "water"
 "beer"    
 "lemonade"

Ответы [ 2 ]

7 голосов
/ 18 марта 2020

Вы можете использовать filter для перебора доступных напитков и in, чтобы проверить, есть ли текущий элемент в списке безопасных напитков:

julia> drinks = ["water", "beer", "bleach"];

julia> safe = ["beer", "lemonade", "water"];

julia> filter(in(safe), drinks)
2-element Array{String,1}:
 "water"
 "beer"
2 голосов
/ 19 марта 2020

Подход filter очень аккуратный. Вы также можете использовать понимание:

[a for a in A if a in B]
...