Как удалить элементы из одного массива те которых нету в другом?
elements=( js python3 php )
exclude=( js python3 java ruby )
как проверить и удалить элементы из массива exclude если их нет в массиве elements в данном случае java ruby
я пробывал так но ничего не вышло
for element in "${exclude[@]}"; do
elements=(${elements[@]/*${element}*/}) || echo error
done
другими словами ели я пытаюсь удалить элемент которого нету в массиве elements=(${elements[@]/*${element}*/}) как вывести это в консоль ?
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Метод «в лоб» с алгоритмической сложностью по операциям порядка O(N+M):
elements=( js python3 php )
exclude=( js python3 java ruby )
for ex in "${exclude[@]}"
do
remove=1
for el in "${elements[@]}"
do
if [ "$ex" = "$el" ]
then
remove=0
fi
done
if [ "$remove" = "1" ]
then
exclude=( "${exclude[@]/$ex}" )
fi
done
Что-то более производительное, наверное, можно сделать с ассоциативными массивами, но старые версии Bash их не поддерживают. Так же, не удивлюсь, если новые версии поддерживают особый синтаксис для этой операции.