Skip to content

Instantly share code, notes, and snippets.

@fedorkk
Created July 14, 2017 08:08
Show Gist options
  • Save fedorkk/900a6992b9fd6a8a5d50c9d9bd8dd734 to your computer and use it in GitHub Desktop.
Save fedorkk/900a6992b9fd6a8a5d50c9d9bd8dd734 to your computer and use it in GitHub Desktop.
Логические операторы в ruby
# В целомс логическими операторами все просто, они позволяют составить сложное условие, результатом которого будет либо 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