किसी सरणी में मान ज्ञात करें


124

रूबी में, मैं एक सरणी में एक मूल्य कैसे पा सकता हूं?


इस प्रकार के प्रश्न के लिए क्षमा करें, मैं यहां नौसिखिया हूं, और मैं इस उपकरण का उपयोग करना सीख रहा हूं, मैं यहां पोस्ट करने से पहले उत्तर ढूंढने का प्रयास करूंगा।
लुकास रेनन

107
इस तरह के प्रश्न के बारे में शिकायत करने वाले सभी लोगों से: कृपया अक्सर पूछे जाने वाले प्रश्न पढ़ें: 'कोई भी प्रश्न बहुत तुच्छ या बहुत "नया" नहीं है। " यदि आपको सवाल पसंद नहीं है, तो इसका उत्तर न दें, और किसी और को ऐसा करने दें। यदि प्रश्न पहले से ही एसओ पर पूछा और उत्तर दिया गया है, तो सुनिश्चित करें, इसे डुप्लिकेट के रूप में चिह्नित करें। लेकिन नए होने के लिए नए लोगों को परेशान करने का कोई कारण नहीं है।
ब्रायन कैंपबेल

जवाबों:


117

मैं अनुमान लगा रहा हूं कि आप यह जानने की कोशिश कर रहे हैं कि क्या सरणी के अंदर एक निश्चित मूल्य मौजूद है, और यदि ऐसा है, तो आप Array # शामिल कर सकते हैं? (मूल्य):

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?ActiveSupport का उपयोग करते समय भी उपयोग कर सकते हैं । #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]

@MarkThomas कृपया मेरे उत्तर के भाग को उद्धृत करें जो आप दावा कर रहे हैं कि यह एक गलत कथन है और मैं ख़ुशी से इसे अपडेट करूँगा। मैं मान रहा हूं कि हम यहां अंग्रेजी का उपयोग कर रहे हैं (शब्दों के लिए परिभाषाएं नहीं)। और जब हजारों लोग Google में "रूबी FIND मान सरणी में" खोजते हैं तो वे इस प्रश्न को पहले परिणाम के रूप में देख रहे हैं, इसलिए मुझे यकीन है कि वे वास्तव में सही उत्तर प्राप्त करना पसंद करेंगे।
माइक एस

1
इसके अलावा, @MarkThomas यदि आप सही थे, तो इस सवाल को stackoverflow.com/questions/1986386/… के डुप्लिकेट होने के लिए बंद किया जाना चाहिए , लेकिन एक सरणी में "खोजने" और "अस्तित्व की जाँच" के बीच एक कार्यात्मक अंतर है।
माइक एस

मुझे लोगों से एलर्जी है कि वे पुराने प्रश्नों को फिर से ज़िंदा करें और कोई और पदार्थ न दें। ऐसा बहुत होता है। आपके मामले में, हालांकि selectपहले से ही 2009 में एक जवाब के रूप में प्रदान किया गया था, आपने एक नमूना स्निपेट प्रदान किया जो थोड़ा बेहतर है। इसलिए इस पर पुनर्विचार करने के बाद, मैंने जो पहले कहा था, उसे वापस लेता हूं।
मार्क थॉमस

8

मुझे पता है कि इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन मैं यहां कुछ मापदंड के आधार पर एरे में तत्वों को छानने का तरीका खोज रहा हूं। तो यहाँ मेरा समाधान उदाहरण है: का उपयोग करते हुए select, मुझे कक्षा में सभी स्थिरांक मिलते हैं जो "RUBY_" से शुरू होते हैं

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

अद्यतन: इस बीच मैंने पाया है कि एरे # grep बहुत बेहतर काम करता है। उपरोक्त उदाहरण के लिए,

Class.constants.grep /^RUBY_/

चाल चली।


1
इस बीच मैंने पाया है कि ऐरे # grep ज्यादा बेहतर काम करता है। यहां तक ​​कि उपरोक्त उदाहरण के लिए, Class.constants.grep /^RUBY_/चाल चली।
mydoghasworms


1

आप ऐरे तरीकों के लिए जा सकते हैं।

सभी सरणी विधियों को देखने के लिए सरणी के methodsसाथ फ़ंक्शन का उपयोग करें । उदाहरण के लिए,

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

वैसे आप सरणी में मान की जाँच के लिए विभिन्न विधि का उपयोग कर सकते हैं a.include?("name")

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.