Intern
Rubyдеги hash (HASH) эмне?
sobes.tech AI
AIден жооп
Hash (Hash) Rubyдө — бул "түйүн-баа" деп аталган уюшулган жуптар топтому, анда ар бир уникалдуу ачкыч белгилүү бир баага байланыштуу. Ачкычтар адатта символдор (Symbol) же саптар (String) болот, бирок eql? жана hash методдору ишке ашырылган бардык объекттер болушу мүмкүн.
Hashтин өзгөчөлүктөрү:
- Тартиптүүлүк: Ruby 1.9 версиясынан бери hashтер элементтердин салынган тартибин колдойт.
- Ачкыч аркылуу кирүү: Бааларга тез жетүү үчүн ылайыктуу ачкыч колдонулат.
- Динамикалык өлчөм: Hashтер кеңейе жана кыскара алат элементтердин кошулушу же алынышы менен.
- Кайталаган ачкычтар жок: Ар бир ачкыч бир Hash ичинде уникалдуу.
Hash түзүү мисалдары:
# Литерал колдонуу
person = { "name" => "Alice", "age" => 30 }
# Символдорду ачкыч катары колдонуу (көбүрөөк жана эффективдүү)
settings = { :theme => "dark", :language => "ru" }
# Ruby 1.9ден баштап колдонулган кыскача жазуу (Key-Value Pair Shorthand)
config = { host: "localhost", port: 8080 }
# Hash.new конструктору аркылуу
empty_hash = Hash.new
Hash менен иштөө негизги операциялар:
| Операция | Мисал | Түшүндүрмө |
|---|---|---|
| Баага жетүү | person["name"] |
"name" ачкычы боюнча бааны кайтарат |
| Кошуу/өзгөртүү | person["city"] = "New York" |
Ачкычка жаңы жуп кошот же маанисин өзгөртөт |
| Жок кылуу | person.delete("age") |
"age" ачкычы боюнча жупту жок кылат |
| Өлчөм | person.size же person.length |
Hashтеги жуптардын санын кайтарат |
| Ачкыч барбы? | 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)
# Hash аркылуу өтүү
user_data.each do |key, value|
puts "#{key}: #{value}"
end