Sobes.tech
Intern

Ինչ է hash (HASH) in Ruby?

sobes.tech AI

Պատասխան AI-ից

Hash (Հեշ) Ruby-ում՝ դա կարգավորված զույգերի հավաքածու է՝ " բանալի-արժեք"։ Յուրաքանչյուր եզակի բանալին կապված է որոշակի արժեքի հետ։ Բանալիները սովորաբար նշաններ (Symbol) կամ տողեր (String) են, բայց կարող են լինել ցանկացած օբյեկտներ, որոնց համար իրականացված են eql? և hash մեթոդները։

Հեշի առանձնահատկությունները՝

  • Կարգավորվածություն: Ruby 1.9 տարբերակից սկսած՝ հեշերը աջակցում են տարրերի ներդրման կարգին։
  • Մուտք դեպի արժեք ըստ բանալիի: Արժեքներին մուտք գործելը արագ է համապատասխան բանալիով։
  • Դինամիկ չափս: Հեշերը կարող են ընդլայնվել կամ կրճատվել հավելում կամ հեռացման միջոցով։
  • Բացառված կրկնվող բանալիներ: Յուրաքանչյուր բանալի եզակի է մեկ հեշում։

Նմուշներ հեշ ստեղծելու համար՝

# Լիտերալ օգտագործելով
person = { "name" => "Alice", "age" => 30 }

# Բոլորովին ավելի տարածված և արդյունավետ՝ նշաններ բանալիներ
settings = { :theme => "dark", :language => "ru" }

# Կոդավորման ձև՝ բանալի-արժեք զույգերի կարճ ձևով, Ruby 1.9-ից սկսած
config = { host: "localhost", port: 8080 }

# Hash.new կոնստրուկտորով
empty_hash = Hash.new

Հիմնական գործողություններ՝

Գործողություն Օրինակ Նկարագրություն
Արժեքին մուտք person["name"] Վերադարձնում է արժեքը՝ ըստ բանալիի "name"
Ավելացում/փոփոխում person["city"] = "New York" Ավելացնում կամ փոփոխում է արժեքը՝ ըստ բանալիի
Հեռացում person.delete("age") Հեռացնում է զույգը՝ ըստ բանալիի "age"
չափս person.size կամ person.length Վերադարձնում է զույգերի քանակը
Բանալիի առկայություն person.key?("name") Ստուգում է՝ կա արդյոք բանալի
Արժեքի առկայություն person.value?(30) Ստուգում է՝ կա արդյոք արժեք
Իտերացիա `person.each { key, value
Բոլոր բանալիները person.keys Վերադարձնում է բոլոր բանալիների զանգվածը
Բոլոր արժեքները person.values Վերադարձնում է բոլոր արժեքների զանգվածը

Օրինակ՝

user_data = {
  name: "Борис",
  age: 45,
  city: "Москва"
}

# Մուտք տվյալների
puts user_data[:name]   # => Борис

# Նոր դաշտ ավելացնել
user_data[:job] = "Разработчик"

# Արժեքը փոխել
user_data[:age] = 46

# Դաշտ հեռացնել
user_data.delete(:city)

# Հեշի վրա անցում
user_data.each do |key, value|
  puts "#{key}: #{value}"
end