Created
July 14, 2017 08:08
-
-
Save fedorkk/900a6992b9fd6a8a5d50c9d9bd8dd734 to your computer and use it in GitHub Desktop.
Логические операторы в ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# В целомс логическими операторами все просто, они позволяют составить сложное условие, результатом которого будет либо true, либо false. | |
# После чего это суловие можно использовать в условном операторе if или unless. | |
# Есть только одна тонкость, у операторов &&, ||, ! и ^ есть синонимы and, or, not и xor. Но у синонимов существенно меньше приоритет при выполнении. | |
# Поэтому их лучше не использовать, что бы не было путаницы в порядке выполнения операций в логическом выражении. | |
# Что касается решения задачи, возможны два варианта: | |
# Сделать несколько циклов: | |
array = [1,2,3,4,5,6,7,8,9,0] | |
for i in 0..array.length | |
if array[i].even? | |
puts array[i] | |
end | |
end | |
for i in 0..array.length | |
if array[i] == 1 || array[i] == 5 | |
puts array[i] | |
end | |
end | |
# и так далее | |
# Такоре решение простое, но не слишком красивое, если у нас очень большой массив, то проходить мы по нему будем долго и много раз | |
# Вместо сложности O(N) у нас будет O(5N) или даже больше, если будет больше условий. | |
# Другой вариант - перебрать весь массив за один проход и заполнить значениями дополнительные массивы, которые потом вывести. | |
array = [1,2,3,4,5,6,7,8,9,0] | |
ar1 = [] | |
ar2 = [] | |
ar3 = [] | |
for i in 0..array.length | |
if array[i].even? | |
ar1.push(array[i]) | |
end | |
if array[i] == 1 || array[i] == 5 | |
ar2.push(array[i]) | |
end | |
if array[i] % 3 == 0 | |
ar3.push(array[i]) | |
end | |
end | |
puts ar1 | |
puts ar2 | |
puts ar3 | |
# В таком случае мы тратим меньше времени на проход по массиву множество раз, но тратим больше памяти на хранение дополнительных массивов. | |
# В зависимости от условия нам может быть выгоднее использоть либо один, либо другой метод. | |
# Так же есть некоторый "синтаксический сахар" в ruby | |
# Вместо | |
if array[i].even? | |
puts array[i] | |
end | |
# Можно сразу написать дейсвтие и потом условие, если все это умещается в одну строку: | |
puts array[i] if array[i].even? | |
# Метод push экземпляра класса array добавляет элемент в конец массива: ar1.push(array[i]) его можно заменить оператором << | |
ar1 << array[i] if array[i].even? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment