arrays - खोज की गई सरणी रिपोर्ट "मिली नहीं" होने के बावजूद भी



search language-agnostic (1)

यह एक सामान्य त्रुटि है और एक तार्किक त्रुटि के लिए उत्तर है जो मैंने नए प्रोग्रामर से विभिन्न भाषाओं में कई प्रश्नों में देखा है।

समस्या एक तत्व के लिए एक सरणी खोज रही है जो कुछ इनपुट मानदंडों से मेल खाती है। एल्गोरिथ्म, छद्म कोड में, कुछ इस तरह दिखता है:

for each element of Array:
    if element matches criteria:
        do something with element
        maybe break out of loop (if only interested in first match)
    else:
        print "Not found"

यह कोड "नहीं मिला" रिपोर्ट करता है, भले ही वह सफलतापूर्वक एक मेल तत्व पाता हो।


समस्या यह है कि जब आप किसी सरणी के माध्यम से रैखिक रूप से कुछ खोज रहे होते हैं, तो आप यह नहीं जान सकते कि यह सरणी के अंत तक पहुंचने तक नहीं मिला है। प्रत्येक गैर-मिलान तत्व के लिए प्रश्न "कोड नहीं मिला" रिपोर्ट में कोड है, भले ही अन्य मिलान तत्व हो सकते हैं।

सरल संशोधन एक चर का उपयोग करना है जो यह ट्रैक करता है कि क्या आपको कुछ मिला है, और फिर लूप के अंत में इस चर की जांच करें।

found = false
for each element of Array:
    if element matches criteria:
        do something with element
        found = true
        maybe break out of loop (if only interested in first match)

if not found:
    print "Not found"

अजगर के पास एक else: इसके छोरों के for ब्लॉक करें। यह तभी कोड निष्पादित करता है जब break उपयोग के कारण समाप्त होने के बजाय लूप पूरा होने के लिए चलता है। यह आपको found चर से बचने की अनुमति देता है (हालांकि यह बाद में प्रसंस्करण के लिए उपयोगी हो सकता है):

for element in someIterable:
    if matchesCriteria(element):
        print("Found")
        break
else:
    print("Not found")

कुछ भाषाओं में अंतर्निहित तंत्र होते हैं जिनका उपयोग आपके स्वयं के लूप लिखने के बजाय किया जा सकता है।

  • कुछ भाषाओं में एक या some फ़ंक्शन होता है जो कॉलबैक फ़ंक्शन लेता है, और एक बूलियन को यह संकेत देता है कि क्या यह सरणी के किसी भी तत्व के लिए सफल होता है।
  • यदि भाषा में एक सरणी फ़िल्टरिंग फ़ंक्शन है, तो आप एक फ़ंक्शन के साथ इनपुट सरणी को फ़िल्टर कर सकते हैं जो मानदंडों की जांच करता है, और फिर जांचें कि क्या परिणाम एक खाली सरणी है।
  • यदि आप किसी तत्व से पूर्ण रूप से मेल खाने का प्रयास कर रहे हैं, तो अधिकांश भाषाएं एक find या index फ़ंक्शन प्रदान करती हैं, जो एक मिलान तत्व की खोज करेगी।

यदि आप बार-बार खोज रहे हैं, तो सरणी को डेटा संरचना में परिवर्तित करना बेहतर हो सकता है जिसे अधिक कुशलता से खोजा जा सकता है। अधिकांश भाषाएँ set और / या hash table डेटा संरचनाएं प्रदान करती हैं (उत्तरार्द्ध भाषा के आधार पर कई नामों के अंतर्गत आता है, जैसे साहचर्य सरणी, मानचित्र, शब्दकोश), और ये आमतौर पर O (1) समय में खोज करने योग्य होते हैं, जबकि एक सरणी O स्कैन कर रहा है (एन)।





language-agnostic