রুবিতে বিদ্যমান হ্যাশগুলিতে কীভাবে যুক্ত করা যায়


102

key => valueরুবির বিদ্যমান জনবহুল হ্যাশের সাথে একটি জুড়ির বিষয়ে , আমি অ্যাপ্রেস 'বিগনিং রুবি'র মাধ্যমে কাজ করার প্রক্রিয়াধীন এবং সবেমাত্র হ্যাশ অধ্যায়টি শেষ করেছি।

আমি হ্যাশগুলির সাথে একই ফলাফলগুলি অর্জন করার সহজ উপায়টি অনুসন্ধান করার চেষ্টা করছি যা অ্যারেগুলির সাথে করে:

x = [1, 2, 3, 4]
x << 5
p x

উত্তর:


188

আপনার যদি একটি হ্যাশ থাকে তবে আপনি কীগুলি দ্বারা রেফারেন্স করে আইটেমগুলিতে এটি যুক্ত করতে পারেন:

hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'

এখানে যেমন [ ]একটি খালি অ্যারে তৈরি করে,{ } তৈরি করার মতো একটি খালি হ্যাশ তৈরি করবে।

অ্যারেগুলিতে একটি নির্দিষ্ট ক্রমে শূন্য বা আরও বেশি উপাদান থাকে, যেখানে উপাদানগুলি নকল করা যেতে পারে। হ্যাশগুলিতে কী দ্বারা সজ্জিত শূন্য বা আরও বেশি উপাদান রয়েছে , যেখানে কীগুলি অনুলিপি করা নাও হতে পারে তবে সেই অবস্থানগুলিতে সঞ্চিত মানগুলি হতে পারে।

রুবিতে হ্যাশগুলি খুব নমনীয় এবং আপনি এটি ফেলে দিতে পারেন এমন কোনও ধরণের কী থাকতে পারে। এটি অন্যান্য ভাষায় আপনি যে কাঠামোগুলি খুঁজে পান তা থেকে এটি আলাদা হয় different

এটি মনে রাখা গুরুত্বপূর্ণ যে হ্যাশের চাবিটির নির্দিষ্ট প্রকৃতিটি প্রায়শই গুরুত্বপূর্ণ:

hash = { :a => 'a' }

# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'

# Fetch with the String 'a' finds nothing
hash['a']
# => nil

# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'

# This is then available immediately
hash[:b]
# => "Bee"

# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }

রুবে অন রুয়েস এটি হ্যাশউইথইন্ডিফিলারঅ্যাক্সেস সরবরাহ করে কিছুটা বিভ্রান্ত করেছে যেখানে এটি প্রতীক এবং সম্বোধনের স্ট্রিং পদ্ধতির মধ্যে অবাধে রূপান্তর করবে।

ক্লাস, সংখ্যা বা অন্যান্য হ্যাশ সহ আপনি প্রায় কোনও কিছুর উপরও সূচক করতে পারেন।

hash = { Object => true, Hash => false }

hash[Object]
# => true

hash[Hash]
# => false

hash[Array]
# => nil

হ্যাশগুলি অ্যারে এবং তদ্বিপরীতগুলিতে রূপান্তরিত হতে পারে:

# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]

# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"} 

mergeহ্যাশগুলিতে জিনিসগুলি "সন্নিবেশ" করার সময় আপনি একবারে এটি করতে পারেন বা হ্যাশগুলি একত্রিত করার পদ্ধতিটি ব্যবহার করতে পারেন :

{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}

মনে রাখবেন যে এটি আসল হ্যাশকে পরিবর্তন করে না, পরিবর্তে একটি নতুন প্রদান করে। যদি আপনি একটি হ্যাশ অন্যটিতে মিশ্রিত করতে চান তবে আপনি এই merge!পদ্ধতিটি ব্যবহার করতে পারেন :

hash = { :a => 'a' }

# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Nothing has been altered in the original
hash
# => {:a=>'a'}

# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}

স্ট্রিং এবং অ্যারেতে অনেকগুলি পদ্ধতির মতো, এটি !ইঙ্গিত করে যে এটি একটি স্থানের অপারেশন।


12
অনেক মূল্যবান তথ্য, তবে @robbrit দ্বারা এতটা সহজ উত্তর হিসাবে সর্বাধিক প্রাথমিক সূত্রের অভাব।
দানহ

1
সর্বোপরি শীর্ষের কাছাকাছি কোথাও জিজ্ঞাসিত প্রশ্নটির উত্তর দিতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন। আপনার পক্ষে এটি করা আমার পক্ষে অভদ্র হবে।
স্টিফান

@ স্টেফান শীর্ষে আরও সংক্ষিপ্ত উদাহরণ যুক্ত করেছেন।
tadman



8
x = {:ca => "Canada", :us => "United States"}
x[:de] = "Germany"
p x

আমি নিম্নলিখিতগুলির সাথে এটি বাস্তবায়নের চেষ্টা করেছি: x['key'] = "value"তবে আমি ত্রুটিগুলি পাচ্ছি। আমার উল্লেখ করা উচিত আমি স্ট্রিং নিয়ে কাজ করছি।
টম

1
ত্রুটি কী? আপনি আরও সুনির্দিষ্ট না হলে এটি কিছু হতে পারে।
tadman

1
hash = { a: 'a', b: 'b' }
 => {:a=>"a", :b=>"b"}
hash.merge({ c: 'c', d: 'd' })
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 

একত্রিত মানটি প্রদান করে।

hash
 => {:a=>"a", :b=>"b"} 

কিন্তু কলার অবজেক্টটি সংশোধন করে না

hash = hash.merge({ c: 'c', d: 'd' })
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 
hash
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 

পুনরায় নিয়োগের কৌশলটি করে।


0
hash {}
hash[:a] = 'a'
hash[:b] = 'b'
hash = {:a => 'a' , :b = > b}

আপনি ব্যবহারকারীর ইনপুট থেকে আপনার কী এবং মান পেতে পারেন, তাই আপনি রুবি .to_sym ব্যবহার করতে পারেন একটি স্ট্রিংকে একটি প্রতীক হিসাবে রূপান্তর করতে পারেন এবং .to_i একটি স্ট্রিংকে একটি পূর্ণসংখ্যায় রূপান্তর করতে পারেন।
উদাহরণ স্বরূপ:

movies ={}
movie = gets.chomp
rating = gets.chomp
movies[movie.to_sym] = rating.to_int
# movie will convert to a symbol as a key in our hash, and 
# rating will be an integer as a value.

0

আপনি ডাবল স্প্ল্যাট অপারেটর ব্যবহার করতে পারেন যা রুবি ২.০ থেকে পাওয়া যায়:

h = { a: 1, b: 2 }
h = { **h, c: 3 }
p h
# => {:a=>1, :b=>2, :c=>3}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.