检查数组中是否存在值
我想知道如何检查数组中是否存在值或对象,如python:
a = [1,2,3,4,5] b = 4 if b in a: print("True!") else: print("False")
但我想知道cython中是否已存在某些内容。 我有一个指针的struct对象数组,想知道该数组中是否存在该对象。 喜欢
cdef Node *array array = 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
下面的代码不正确,但它是为了说明我的意思。
你几乎必须遍历数组并检查每个元素。
#include bool isvalueinarray(int val, int *arr, int size){ int i; for (i=0; i < size; i++) { if (arr[i] == val) return true; } return false; }
尝试下一个:
(阅读评论和测试,了解它的工作原理)
#include #include /* 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; }
笔记:
-
由于C不支持重载函数,因此indexOf()仅适用于数组类型的整数。
-
C不支持数组指针的确定长度。 因此,您需要手动传递数组大小。
-
测试环境:
-
$ 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