Рубиновые контейнеры

Опубликовано: 7 Января, 2023

В Ruby мы можем легко поместить определение метода внутри класса-контейнера, а затем создать новые объекты, отправив новое сообщение в этот класс, как и в большинстве языков сценариев. В Ruby есть встроенный модуль Enumerable , который включается классами Strings, Array, Hash, Range и другими, представляющими набор значений. В основном существует четыре типа контейнеров, которые представляют набор данных в Ruby:

  • Строки. Строка представляет собой последовательность или набор из одного или нескольких символов.
  • Массивы. Массивы представляют собой набор упорядоченных объектов с целочисленным индексом.
  • Хэши: Хэши — это наборы уникальных пар <key, value>.
    • Его часто называют ассоциативными массивами, картами или словарями.
    • Это неупорядочено.
  • Range s: диапазоны отображают набор значений между начальной и конечной точками. Значения могут быть диапазоном, символом, строкой или объектом.

Рубиновые струны:

Строки Ruby являются изменяемыми и создаются с использованием одинарных (' ') или двойных кавычек (" ") без упоминания типов данных.

Пример 1:

Ruby




# Ruby code implementation 
# for creation of Ruby Strings
  
# using single quotes
 puts "Ruby String using single quotes in GFG!"
  
# using double quotes
 puts "Ruby String using double quotes in GFG!"
  
# storing string into variables
 str = "Ruby String using variable in GFG!"
  
# displaying string
 puts str

Выход:

Ruby String using single quotes in GFG!
Ruby String using double quotes in GFG!
Ruby String using a variable in GFG!

Двойные кавычки интерполируют переменные, тогда как одинарные кавычки не могут интерполировать.

Пример 2:

Ruby




# Ruby code implementation to 
# show single and double quotes
  
str1 = "Hello Geeks!"
str2 = "Hello GFG"
  
# using single quotes
puts "#{str1}"  
puts "#{str2}"  
puts "#{str1}"  
puts "#{str2}"  

Выход:

#{str1}
#{str2}
Hello Geeks!
Hello GFG

Доступ осуществляется путем упоминания индекса внутри квадратной скобки[].

Пример 3:

Ruby




# Ruby code implementation 
# for accessing of Ruby Strings
 str = "GeeksforGeeks"
    
# accessing the specified substring
 puts str["Geeks"]
  
# print a single character from a 
# string using positive index
 puts str[2]
    
# print a single character from a 
# string using negative index
 puts str[-2]
    
# print string in a range using comma(,)
 puts str[4, 10]
    
# print string in a range using(..) operator
 puts str[4 .. 8]

Выход:

Geeks
e
k
sforGeeks
sforG

Чтобы узнать больше, обратитесь к статье Ruby Strings.

Рубиновые массивы:

Массив Ruby хранится в смежных ячейках памяти. Он упорядочен по позициям с целочисленным индексом. Одномерный массив можно создать с помощью нового метода класса (Array.new) или с помощью буквального конструктора []

Using new class method
 

Пример 4:

Ruby




# Ruby code implementation for creation of Ruby Arrays 
# using new method
 arr = Array.new(4, "GFG")
 puts arr.size
  
# displaying array elements
 puts "#{arr}"

Выход:

4 
["GFG", "GFG", "GFG", "GFG"]

Пример 5:

Ruby




# Ruby code implementation for creation of Ruby Strings
# Using literal[] method
arr = Array["a", "b", "c", "d","e", "f"]
  
# displaying array elements
puts "#{arr}"
  
# displaying array size
puts "Size of arr is: #{arr.size}"
  
# displaying array length
puts "Length of arr is: #{arr.length}"

Выход:

["a", "b", "c", "d", "e", "f"]
Size of arr is: 6
Length of arr is: 6

Мы можем получить один или несколько элементов, используя как положительные, так и отрицательные индексы:

Пример 6:

Ruby




# Ruby code implementation for accessing of Ruby Arrays
 str = ["GFG", "Geeks", "Ruby", "Containers"]
  
# Accessing single array elements
 puts "Value at index 1: #{str[1]}"  # using positive index
 puts "Value at index -1: #{str[-1]}"  # using negative index
  
# Accessing multiple array elements
# using positive index range
puts "Positive index range [1,2]: #{str[1,2]}" 
  
# using negative index range
puts "Negative index range [-1,2]: #{str[-1,2]}"

Выход:

Value at index 1: Geeks
Value at index -1: Containers
Positive index range [1,2]: ["Geeks", "Ruby"]
Negative index range [-1,2]: ["Containers"]

Рубиновые хэши:

Рубиновые хэши — это набор уникальных ключей и их значений, а хеш можно создать с помощью literal[], Hash.new() или try_convert().

Пример 7:

Ruby




# Ruby code implementation for creation of Ruby Hashes
# Using literal[]
 puts "Creation of Hashes using literal[]"
 p Hash["x", 30, "y", 19]
 p Hash["x" => 30, "y" => 19]
  
# Using of new method
 puts " Creation of Hashes using new"
 a = Hash.new("geeksforgeeks")
 p a["x"] = 40
 p a["x"]
 p a["y"]
 puts " Creation of Hashes using try_convert"
  
# Using of try_convert method
 p Hash.try_convert({3=>8})
 p Hash.try_convert("3=>8")

Выход:

Creation of Hashes using literal[]
{"x"=>30, "y"=>19}
{"x"=>30, "y"=>19}
Creation of Hashes using new
40
40
"geeksforgeeks"
Creation of Hashes using try_convert
{3=>8}
nil

Мы можем извлекать элементы (значения) с помощью индекса (ключа), который может быть любым (целое число, символ и т. д.).

Пример 8:

Ruby




# Ruby code implementation for accessing of Ruby Hashes
 a = {"x" => 45, "y" => 67}
 p a["x"]

Выход:

45

Значение по умолчанию для хэшей равно нулю. Чтобы узнать больше о Ruby Hashes, нажмите здесь.

Рубиновые диапазоны:

Он объявляется с помощью операторов диапазона «..» и «…».

  • Оператор «..» включает все переменные в пределах диапазона, а также начальное и конечное значение.
  • Оператор «..» включает все переменные в пределах диапазона, а также начальное значение, но не конечное значение.

Пример 9:

Ruby




#Ruby code to show ranges in Ruby
# This will separate the values by comma ","
$, =", "   
  
#This include 5 & 10
r1 = (5..10).to_a 
  
#This include 5 but not 10
r2 = (5...10).to_a  
  
#This include "asa" & "asd"
r3 = ("asa".."asd").to_a
  
#This include "asa" but not "asd"
r4 = ("asa"..."asd").to_a 
puts "#{r1}"
puts "#{r2}"
puts "#{r3}"
puts "#{r4}"

Выход:

[5, 6, 7, 8, 9, 10]
[5, 6, 7, 8, 9]
["asa", "asb", "asc", "asd"]
["asa", "asb", "asc"]

Мы можем использовать эти диапазоны как последовательности, условия и интервалы. Чтобы узнать больше о Ruby Ranges, нажмите здесь.

Блоки

Блок — это последовательность кода ruby, заключенная в do/end или фигурные скобки. Методы могут принимать неявный аргумент блока и вызывать код в этом блоке с помощью ключевого слова yield.

Пример 10:

Ruby




# Ruby code implementation for creation of Ruby Blocks
def two_times
  yield
  yield
end
two_times {puts "GFG!"};

Выход:

GFG!
GFG!

Блоки как замыкания:

Блоки могут принимать аргумент:

>> def times
  yield("fir")
  yield("sec")
end
=> nil
>> times {|n| puts "#{n}: yoo"}
GFG! Rocks
GFG! is the best
=> nil

Пример 11:

Ruby




# Ruby code implementation for creation of Ruby Blocks as Closures
  
def times
  yield("Rocks")
  yield("is the best")
end
times {|ys| puts "GFG! #{ys}"}

Выход:

GFG! Rocks
GFG! is the best

Yield возвращает результат выполнения блока:

Пример 12:

Ruby




# Ruby code implementation for 
# creation of Ruby Blocks as Closures
  
def gfg
  [yield("GEEKS"), yield("FOR"), yield("GEEKS")]
end
gfg {|geek| puts "#{geek.upcase.reverse}"}

Выход:

SKEEG
ROF
SKEEG

Блок закрытия может быть определен в одной области видимости и может быть вызван в другой области видимости. Чтобы узнать больше о замыканиях в Ruby, нажмите здесь.

Больше применений блоков:

Блоки используются многими другими способами:

Пример 13:

Ruby




# Ruby code implementation for 
# Ruby Blocks using each method
 ["Geeks", "GFG", 55].each do |n|
   puts n  
 end

Выход:

Geeks
GFG
55

По умолчанию:

Ruby




# Ruby code implementation for 
# Ruby Blocks using times method
 x = "NULL"
 4.times do |x|
  puts "Value Inside the block: #{x}"
   end
  puts "Value Outside the block: #{x}"

Выход:

Value Inside the block: 0
Value Inside the block: 1
Value Inside the block: 2
Value Inside the block: 3
Value Outside the block: NULL

Чтобы узнать больше о Ruby Blocks, нажмите здесь.