একটি অ্যারেতে মান সন্ধান করুন


124

রুবিতে, আমি কীভাবে একটি অ্যারেতে একটি মান খুঁজে পেতে পারি?


এই ধরণের প্রশ্নের জন্য দুঃখিত, আমি এখানে নবাগত এবং আমি এই সরঞ্জামটি ব্যবহার করতে শিখছি, আমি এখানে পোস্ট করার আগে উত্তরগুলি খুঁজতে চেষ্টা করব।
লুকাস রেনান

107
এই ধরণের প্রশ্নের জন্য যারা অভিযোগ করেন তাদের প্রত্যেককে: দয়া করে FAQ পড়ুন: 'কোনও প্রশ্ন খুব বেশি তুচ্ছ বা খুব "নবাগত" নয়। আপনি যদি প্রশ্নটি পছন্দ না করেন তবে এর উত্তর দেবেন না এবং অন্য কাউকে তা করতে দিন। যদি প্রশ্নটি ইতিমধ্যে জিজ্ঞাসা করা হয়ে থাকে এবং এসও-তে উত্তর দেওয়া হয়, তবে অবশ্যই, এটি সদৃশ হিসাবে চিহ্নিত করুন। তবে নতুন হওয়ার জন্য নতুনদের বোকা দেওয়ার কোনও কারণ নেই।
ব্রায়ান ক্যাম্পবেল

উত্তর:


117

আমি অনুমান করছি যে আপনি অ্যারের ভিতরে একটি নির্দিষ্ট মান বিদ্যমান কিনা তা সন্ধান করার চেষ্টা করছেন এবং যদি এটি হয় তবে আপনি অ্যারে # অন্তর্ভুক্ত ব্যবহার করতে পারেন? (মান):

a = [1,2,3,4,5]
a.include?(3)   # => true
a.include?(9)   # => false

আপনি যদি অন্য কিছু বোঝাতে চান তবে রুবি অ্যারে এপিআই পরীক্ষা করুন


1
আমি অ্যারে # সূচকটি ব্যবহার করব তবে রুবি অ্যারে এপিআই পরীক্ষা করা একটি দুর্দান্ত পরামর্শ।
উইলিয়াম জড

82

ব্যবহার Array#selectআপনাকে মানদণ্ডগুলি পূরণ করে এমন উপাদানগুলির একটি অ্যারে দেবে। তবে আপনি যদি আপনার মানদণ্ডের সাথে মিল রেখে অ্যারে থেকে উপাদানটি বের করার কোনও উপায় খুঁজছেন তবে Enumerable#detectআরও ভাল উপায় হবে:

array = [1,2,3]
found = array.select {|e| e == 3} #=> [3]
found = array.detect {|e| e == 3} #=> 3

অন্যথায় আপনাকে এমন বিশ্রী কিছু করতে হবে:

found = array.select {|e| e == 3}.first

ধন্যবাদ! আমি জানতাম Enumerable#selectতবে #detectঠিক আমি যা খুঁজছিলাম।
জাস্টিন অ্যাডকিনস

1
array.select{}শর্তের সাথে মেলে এমনগুলি অনুসন্ধান করে অ্যারের সমস্ত উপাদান দিয়ে যাবে। array.findপরিবর্তে শর্তের সাথে মেলে এমন প্রথম উপাদানটি ফিরিয়ে দেবে। তাই বাঞ্ছনীয় ব্যবহার array.find{ |e| e == 3 }তারপরarray.select{ |e| e == 3 }.first
অস্কার গঞ্জালেস

আমি মনে করি আপনি বোঝাতে চেয়েছিলেন .find_index কোনও আছে কিনা তা আমি জানি না.find
রস এট্রিল

26

আপনি যদি অ্যারে থেকে একটি মান সন্ধান করতে চান তবে ব্যবহার করুন Array#find:

arr = [1,2,6,4,9] 
arr.find {|e| e%3 == 0}   #=>  6

আরো দেখুন:

arr.select {|e| e%3 == 0} #=> [ 6, 9 ]
e.include? 6              #=> true

#in?অ্যারিতে কোনও মান বিদ্যমান কিনা তা সন্ধান করতে আপনি অ্যাক্টিভসপোর্ট ব্যবহার করার সময়ও ব্যবহার করতে পারেন । #in?যে কোনও বস্তুর প্রতিক্রিয়া জানায় তার জন্য কাজ করে #include?:

arr = [1, 6]
6.in? arr                 #=> true

আমি Array#findরুবি রেফারেন্সে কোনও দেখতে পাচ্ছি না । অন্যান্য লোকেরা যেহেতু এটি উল্লেখ করেছে সেহেতু অবশ্যই অবশ্যই একটি রেলের জিনিস হবে।
হুমম

1
@Ross Attrill না, এটা আছে Enumerable, ruby-doc.org/core-2.7.1/Enumerable.html#method-i-find
fangxing

আমি ভুলভাবে ধরে নিয়েছি যে রুবি-ডক শোতে অন্তর্ভুক্ত এবং উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতিগুলি। আমার জন্য গুরুত্বপূর্ণ পাঠ।
রস অ্যাট্রিল

23

এটার মত?

a = [ "a", "b", "c", "d", "e" ]
a[2] +  a[0] + a[1]    #=> "cab"
a[6]                   #=> nil
a[1, 2]                #=> [ "b", "c" ]
a[1..3]                #=> [ "b", "c", "d" ]
a[4..7]                #=> [ "e" ]
a[6..10]               #=> nil
a[-3, 3]               #=> [ "c", "d", "e" ]
# special cases
a[5]                   #=> nil
a[5, 1]                #=> []
a[5..10]               #=> []

বা এই মত?

a = [ "a", "b", "c" ]
a.index("b")   #=> 1
a.index("z")   #=> nil

ম্যানুয়াল দেখুন



16

ব্যবহার করুন:

myarray.index "valuetoFind"

এটি আপনাকে যে উপাদানটি চান তা সূচকটি ফিরিয়ে দেবে বা আপনার অ্যারেতে মানটি না রাখলে শোনো হবে।


9

এই উত্তরটি সবার জন্য যা গ্রহণযোগ্য উত্তরটি উপলব্ধি করে যে এটি বর্তমানে লেখা হিসাবে প্রশ্নটির ঠিকানা দেয় না।

প্রশ্ন হল কিভাবে অনুরোধ এটি একটি অ্যারের একটি মান। গৃহীত উত্তরটি দেখায় যে কীভাবে একটি অ্যারেতে একটি মান বিদ্যমান আছে তা যাচাই করা যায় ।

ইতিমধ্যে ব্যবহারের একটি উদাহরণ রয়েছে index, সুতরাং আমি selectপদ্ধতিটি ব্যবহার করে একটি উদাহরণ সরবরাহ করছি ।

1.9.3-p327 :012 > x = [1,2,3,4,5]
  => [1, 2, 3, 4, 5] 
1.9.3-p327 :013 > x.select {|y| y == 1}
  => [1]

@ মার্কথোমাস দয়া করে আমার উত্তরটির অংশটি উদ্ধৃত করুন যে আপনি দাবি করছেন এটি একটি ভুল বিবৃতি এবং আমি আনন্দের সাথে এটি আপডেট করব। আমি ধরে নিচ্ছি যে আমরা এখানে ইংরেজি ব্যবহার করছি (শব্দের সংজ্ঞা নেই)। এবং যখন কয়েক হাজার লোক গুগলে "রুবি FIND মান হিসাবে অ্যারে" অনুসন্ধান করেন তারা এই প্রশ্নটিকে প্রথম ফলাফল হিসাবে দেখছেন, তাই আমি নিশ্চিত যে তারা সকলেই আসলে সঠিক উত্তর পেতে পছন্দ করবে।
মাইক এস

1
তদ্ব্যতীত, @MarkThomas আপনি সঠিক ছিল তারপর এই প্রশ্নের ডুপ্লিকেট হচ্ছে জন্য বন্ধ করে দেওয়া উচিত stackoverflow.com/questions/1986386/... , কিন্তু "খোঁজার" এবং একটি অ্যারের মধ্যে "অস্তিত্বের পরীক্ষণ" এর মাঝে একটি কার্মিক পার্থক্য নেই।
মাইক এস

পুরানো প্রশ্নকে পুনরুত্থিত করা এবং আর কোনও পদার্থের সামান্য সরবরাহ করার জন্য আমার কাছে এলার্জি রয়েছে। এটি অনেক কিছু ঘটে। আপনার ক্ষেত্রে, যদিও selectইতিমধ্যে 2009 সালে উত্তর হিসাবে সরবরাহ করা হয়েছিল, আপনি একটি নমুনার স্নিপেট সরবরাহ করেছিলেন যা কিছুটা ভাল। সুতরাং এটি পুনর্বিবেচনা করার পরে, আমি আগে যা বলেছিলাম তা প্রত্যাহার করি।
মার্ক টমাস

8

আমি জানি এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে আমি এখানে কিছু মানদণ্ডের ভিত্তিতে অ্যারেতে উপাদানগুলি ফিল্টার করার জন্য একটি উপায় অনুসন্ধান করতে এসেছি। সুতরাং আমার সমাধানের উদাহরণটি এখানে: ব্যবহার করে select, আমি ক্লাসে সমস্ত ধ্রুবকগুলি খুঁজে পাই যা "RUBY_" দিয়ে শুরু হয়

Class.constants.select {|c| c.to_s =~ /^RUBY_/ }

আপডেট: এর মধ্যে আমি আবিষ্কার করেছি যে অ্যারে # গ্রেপ আরও ভাল কাজ করে। উপরের উদাহরণের জন্য,

Class.constants.grep /^RUBY_/

কৌতুকটি করেছে


1
ইতিমধ্যে আমি আবিষ্কার করেছি যে অ্যারে # গ্রেপ আরও ভাল কাজ করে। এমনকি উপরের উদাহরণের জন্য, Class.constants.grep /^RUBY_/কৌশলটি করেছিলেন।
mydoghasworms


1

আপনি অ্যারে পদ্ধতিতে যেতে পারেন।

সমস্ত অ্যারে পদ্ধতি দেখতে অ্যারের methodsসাথে ফাংশন ব্যবহার করুন । উদাহরণ স্বরূপ,

a = ["name", "surname"] 
a.methods

অ্যারেতে মান পরীক্ষা করার জন্য আপনি বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন আপনি ব্যবহার করতে পারেন a.include?("name")

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