2013-02-26 145 views
19

में मौजूद मैं कैसे अगर एक मूल्य या एक वस्तु अजगर की तरह एक सरणी में मौजूद हैं जाँच करने के लिए जानना चाहता हूँ:चेक अगर एक मूल्य के एक सरणी

a = [1,2,3,4,5] 
b = 4 
if b in a: 
    print("True!") 
else: 
    print("False") 

लेकिन मुझे पता है कि अगर कुछ पहले से ही cython में मौजूद चाहते हैं। मेरे पास पॉइंटर का एक स्ट्रक्चर ऑब्जेक्ट सरणी है और यह जानना है कि ऑब्जेक्ट इस सरणी में मौजूद है या नहीं।

cdef Node *array 

array = <Node *>malloc(5 * cython.sizeof(Node)) 

for i in range(5): 
    array[i].index = i 

cdef Node test = array[3] 

if test in array: 
    print("True!") 

cdef struct Node: 
    int index 

नीचे दिया गया कोड सही नहीं है लेकिन यह मेरे अर्थ का वर्णन करने की कोशिश करने के लिए है।

उत्तर

26

आपको सरणी के माध्यम से फिर से भरना होगा और प्रत्येक तत्व को जांचना होगा।

#include <stdbool.h> 

bool isvalueinarray(int val, int *arr, int size){ 
    int i; 
    for (i=0; i < size; i++) { 
     if (arr[i] == val) 
      return true; 
    } 
    return false; 
} 
+2

धन्यवाद, मेरे मामले में मुझे लगता है कि सबसे अच्छा समाधान है। मेरी सरणी कम है और मुझे इसे कई बार खोजना है। प्रत्येक बार क्रमबद्ध और bsearch उचित रूप से एक महान समय में सुधार नहीं करते हैं। बहुत बहुत धन्यवाद। –

-2

अगले का प्रयास करें: के बाद से सी के लिए समर्थन नहीं है

  1. :

    (यह कैसे काम कर जानकारी के लिए टिप्पणियों और परीक्षण को पढ़ने)

    #include <stdio.h> 
    #include <assert.h> 
    
    
    /* 
    Return index an integer number begin from start an array, 
    otherwise return -1. 
    */ 
    int indexOf(int *array, int array_size, int number) { 
        for (int i = 0; i < array_size; ++i) { 
         if (array[i] == number) { 
          return i; 
         } 
        } 
        return -1; 
    } 
    
    
    // Tests for indexOf() 
    void test_indexOf() { 
        int array[10] = {12, 78, -43, 0, 21, 12, 20, -9, 1, -1}; 
        assert(indexOf(array, 10, 12) == 0); 
        assert(indexOf(array, 10, 0) == 3); 
        assert(indexOf(array, 10, 2) == -1); 
        assert(indexOf(array, 10, 43) == -1); 
        assert(indexOf(array, 10, 11) == -1); 
        assert(indexOf(array, 10, -1) == 9); 
        assert(indexOf(array, 10, 1) == 8); 
        assert(indexOf(array, 10, -2) == -1); 
        assert(indexOf(array, 10, 3) == -1); 
    } 
    
    
    int main() { 
        test_indexOf(); 
        return 0; 
    } 
    

    नोट्स रीलोड फ़ंक्शंस, indexOf() केवल सरणी प्रकार के पूर्णांक के साथ काम करेगा जर।

  2. सी ने सरणी के सूचक के लंबाई को निर्धारित करने के लिए समर्थन नहीं दिया है। तो, आपको सरणी के आकार को मैन्युअल रूप से पास करने की आवश्यकता है।

  3. परीक्षण वातावरण:

-

$ uname -a 
Linux wlysenko-Aspire 3.13.0-37-generiC#64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 
$ gcc --version 
gcc (Ubuntu 4.8.5-2ubuntu1~14.04.1) 4.8.5