মানগুলির অ্যারেতে রুবি হ্যাশ


118

আমার আছে এটা:

hash  = { "a"=>["a", "b", "c"], "b"=>["b", "c"] } 

এবং আমি এটি পেতে চাই: [["a","b","c"],["b","c"]]

এটি মনে হয় এটি কাজ করা উচিত তবে এটি কার্যকর করে না:

hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]} 

কোনও পরামর্শ?


নীচের উত্তরগুলি সঠিক ( hash.valuesআরও ভাল আইএমও হওয়া)। তবে আমি এটি উল্লেখ করতে চেয়েছিলাম যখন আপনি Hash#eachএটির কোনও ব্লক সরবরাহ করেন কেবল হ্যাশের পুরো মানটি ফিরে আসবে। আপনি যদি প্রতিটি আইটেমটিতে একটি অপারেশন করতে চান এবং এটিকে অ্যারে হিসাবে ফিরিয়ে দিতে চান তবে Hash#collectএটির বা তার উপাধি দিন Hash#mapএখানে পরিবেশনায় আরও স্টাফ ।
ব্রাইমক

3
এই প্রশ্নটি অদ্ভুতভাবে পরিচিত বলে মনে হচ্ছে ... আমি অবাক হচ্ছি যে এই মুহুর্তে কতজন একই হোমওয়ার্ক অ্যাসাইনমেন্টে কাজ করছেন।
পিটার ব্রাউন

উত্তর:


260

এছাড়াও, কিছুটা সহজ ...

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]

রুবি ডক এখানে


3
+ +! নিফটি! একটি প্রতিযোগিতামূলক উত্তর থাকা সত্ত্বেও আমি উত্সাহিত করব (ব্যবহার করে map), কারণ আমি এটি অনেক পছন্দ করি!
মাইকেল ডুরান্ট

2
Hash#valuesশুধুমাত্র সহজ নয়, তবে আরও দক্ষ। তুলনা time ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'সঙ্গেtime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'
jordanbtucker

+1 (আমি আপনার কোডটি চেষ্টা করার পরে অবাক হয়ে আশ্চর্য হয়েছি) অনেকগুলি পদ্ধতি ব্যবহার করে সূচি মুছে ফেলার কোনও ভাগ্য ছাড়াই আমি একদিন কাটিয়েছি ... আমি যা বলতে পারি তা আপনাকে অনেক ধন্যবাদ !!! : ডি
রোমানস 8.38-39

2
কীগুলি সঠিকভাবে মুদ্রিত হয় যা সেগুলি ঘটে?
stack1

43

আমি ব্যবহার করব:

hash.map { |key, value| value }

3
আমি এটিকে কম করে দেখিনি, তবে এটি এর চেয়ে জটিল জটিল Hash#values
মার্ক টমাস

1
হ্যাঁ, আমিও রায়ের উত্তরটিকে অগ্রাহ্য করেছি। আমি যখন একটি প্রতিযোগিতামূলক উত্তরটি পছন্দ করি তখন খুশি।
মাইকেল ডুরান্ট

3
আমি মনে করি আমরা এখানে প্রতিযোগিতা করছি না বরং একে অপরকে সাহায্য করছি, তাই না? :)
উইকটিসি 26

মান হিসাবে কীগুলি ব্যবহার করে হ্যাশ থেকে একটি অ্যারে তৈরি করার চেষ্টা করার সময় আমি ঠিক কী খুঁজছিলাম। ধন্যবাদ :)
ফ্যাবিয়ান লেটজেব

যখন আপনাকে একই সাথে কীগুলি দিয়ে কিছু যুক্তিও করতে হবে তখন দরকারী ।
ক্রিস সাইরেফাইস

23
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

Enumerable#collectএকটি ব্লক নেয় এবং গণনার প্রতিটি উপাদানের উপরে একবার ব্লক চালানোর ফলাফলের অ্যারে প্রদান করে। সুতরাং এই কোডটি কেবল কীগুলি উপেক্ষা করে সমস্ত মানগুলির একটি অ্যারে প্রদান করে।

Enumerableমডিউল বেশ ভালো। এটি ভালভাবে জানা আপনার প্রচুর সময় এবং প্রচুর কোড সাশ্রয় করতে পারে।


2
ভুলে যাবেন না, @ রায় তোয়ালের উত্তরগুলির মতো, hash.valuesএখানেই শেষ পর্যন্ত সঠিক উত্তর।
tadman

বা hash.map(&:second):)
জাপ হাগম্যানস


4

এটা যেমন সহজ

hash.values
#=> [["a", "b", "c"], ["b", "c"]]

এটি হ্যাশ থেকে মান সহ একটি নতুন অ্যারে ফিরে আসবে

আপনি যদি নতুন অ্যারেটি সঞ্চয় করতে চান তবে

array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]

array_of_values
 #=> [["a", "b", "c"], ["b", "c"]]

2

এটি একটি আছে:

hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]

এটি কেন কাজ করে:

&কল to_procবস্তুর উপর, এবং পদ্ধতি একটি ব্লক যেমন প্রেরণ করা হয়।

something {|i| i.foo }
something(&:foo)

আরও গভীরতার ব্যাখ্যা brianstorti.com
সিলভাইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.