রুবি অ্যারে: নির্বাচন করুন (), সংগ্রহ (), এবং মানচিত্র ()


106

ম্যাপিংয়ের জন্য বাক্য গঠন:

a = ["a", "b", "c", "d"]      #=> ["a", "b", "c", "d"] 
a.map {|item|"a" == item}     #=> [true, false, false, false] 
a.select {|item|"a" == item}  #=> ["a"]

আমার যদি থাকে তবে প্রশ্ন:

 irb(main):105:0> details[1]
 => {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .", :qty=>"", 
 :qty2=>"1", :price=>"5,204.34 P"}

আমি এই অ্যারেতে খালি পরিমাণ মান রয়েছে এমন প্রতিটি এন্ট্রি মুছতে বা এটিতে কিছু মান সহ কেবল একটি নির্বাচন করতে চাই।

আমি চেষ্টা করেছিলাম:

details.map {|item|"" == item}

কেবল প্রচুর মিথ্যা প্রত্যাবর্তন করে এবং তারপরে আমি যখন ঠিক একই মানচিত্রটি ব্যবহার করি তখন নির্বাচন করতে পাই:

[]

আপনি যদি ঘনিষ্ঠভাবে তাকান তবে দেখে মনে হচ্ছে এটি হ্যাশগুলির একটি অ্যারে
এমিলি

@ এমিলি: খুব সত্য, আমি ঠিক তা বুঝতে পেরেছি। সর্বশেষ কোড নমুনা আমাকে অন্যথায় ভাবতে বাধ্য করেছিল, কারণ :qtyএমনকি সেখানে উপস্থিত হয় না।
নিক্লাস বি।

উত্তর:


131

দেখে মনে হচ্ছে detailsহ্যাশগুলির একটি অ্যারে। সুতরাং itemআপনার ব্লকের ভিতরে পুরো হ্যাশ হবে। অতএব, :qtyকীটি পরীক্ষা করতে , আপনি নিম্নলিখিতগুলির মতো কিছু করতে চাই:

details.select{ |item| item[:qty] != "" }

এটি আপনাকে এমন সমস্ত আইটেম দেবে যেখানে :qtyকীটি খালি স্ট্রিং নয়।

অফিসিয়াল সিলেক্ট ডকুমেন্টেশন


26

সম্পাদনা: আমি ঠিক বুঝতে পেরেছি আপনি ফিল্টার করতে চান details, যা হ্যাশের একটি অ্যারে। সেক্ষেত্রে আপনি করতে পারেন

details.reject { |item| item[:qty].empty? }

অভ্যন্তরীণ ডেটা কাঠামো নিজেই একটি অ্যারে নয়, তবে একটি হ্যাশ। আপনি এখানেও ব্যবহার করতে পারেন selectতবে ব্লকটিকে এই ক্ষেত্রে কী এবং মান দেওয়া হয়:

irb(main):001:0> h = {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .", :qty=>"", :qty2=>"1", :price=>"5,204.34 P"}
irb(main):002:0> h.select { |key, value| !value.empty? }
=> {:sku=>"507772-B21", :desc=>"HP 1TB 3G SATA 7.2K RPM LFF (3 .", 
    :qty2=>"1", :price=>"5,204.34 P"}

বা ব্যবহার করে reject, যা এর বিপরীত হয় select(প্রদত্ত শর্তটি ধারণ করে এমন সমস্ত আইটেম বাদ দেয়):

h.reject { |key, value| value.empty? }

মনে রাখবেন এটি রুবি ১.৯। আপনার যদি 1.8 এর সাথে সামঞ্জস্য বজায় রাখতে হয় তবে আপনি এটি করতে পারেন:

Hash[h.reject { |key, value| value.empty? }]

@ ইংলকালা: আমি কেবল বুঝতে পেরেছিলাম যে আমার উত্তরটি আসলে আপনার যা প্রয়োজন তা নয়। detailsঅ্যারে নিজেই ফিল্টার করতে দয়া করে আমার সম্পাদনা পরীক্ষা করুন check
নিক্লাস বি।

9

একটি হ্যাশ নিয়ে কাজ করার সময় {}, এর ভিতরে থাকা ব্লকের জন্য কী এবং মান উভয় ব্যবহার করুন ||

details.map {|key,item|"" == item}

=>[false, false, true, false, false]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.