C 如果我能';如果在if条件中没有定义变量,那么在这段代码中如何减少对数组的多次搜索?
我有一个功能,他的身体看起来很像这样:C 如果我能';如果在if条件中没有定义变量,那么在这段代码中如何减少对数组的多次搜索?,c,arrays,C,Arrays,我有一个功能,他的身体看起来很像这样: if (contains(array, element1) > -1){ // do something } else if (contains(array, element2) > -1) { // do something } else if (contains(array, element3) > -1) { // do someting }... 函数con
if (contains(array, element1) > -1){
// do something
} else if (contains(array, element2) > -1) {
// do something
} else if (contains(array, element3) > -1) {
// do someting
}...
函数contains
将在我的数组中循环,检查它是否包含我传递给它的元素
,如果它存在,则返回它的位置;如果它不存在,则返回-1
在我的//do something
部分中,我需要这个元素在数组中的位置。我有几种不同的方法可以做到这一点:
contains()
函数来获取位置李>
int element1Loc = contains(array, element1);
int element2Loc = contains(array, element2);
int element3Loc = contains(array, element3);
if (element1Loc > -1){
// do something
} else if (element2Loc > -1) {
// do something
} else if (element3Loc > -1) {
// do someting
}...
contain
以返回int数组[2]
,无论元素是否在其中,array[0]
等于0
或1
,然后array[1]
q将等于实际位置,使代码如下所示:
if (contains(array, element1)[0] > -1){
// do something
} else if (contains(array, element2)[0] > -1) {
// do something
} else if (contains(array, element3)[0] > -1) {
// do something
}...
contains
的返回保存在一个变量中,并运行几个if语句李>
解决方案1将在我的阵列中搜索至少两次。解决方案2将搜索至少与我正在查找的元素相同的次数。解决方案3可能是最好的,但可能不是最优雅的。解决方案4将运行每个if语句
搜索一次最好的方法是什么?我是否应该创建一个函数,它接受我正在查找的所有内容并返回一个包含每个元素位置的数组?我想得太多了吗?我会修改
contains
以仅使用返回值来指示查找的错误/成功,如果找到了参数,则通过引用输出参数
int contains(int *data, int value, int *loc)
{
for(int i = 0; i < SIZE; i++)
{
if(data[i]==value)
{
*loc = i;
return 1; // success
}
}
*loc = -1;
return 0; // failure
}
您可以传递一个指针,指向
int
,当contains函数找到一个元素时,将填充该指针。然后在if
块中,您将确信pos
是正确的索引
例如:
int pos;
if (contains(array, element1, &pos) > -1) {
// Here you can check pos for the position
} else if (contains(array, element2, &pos) > -1) {
// Here you can check pos as well...
}
这是一个根本不需要修改
包含的的解决方案:
int-pos;
if((pos=contains(array,element1))>-1){
//用pos做点什么
}如果((pos=contains(array,element2))>-1,则为else{
//用pos做点什么
}如果((pos=contains(array,element3))>-1,则为else{
//用pos做点什么
}
这是因为大多数命令式语言中的变量赋值都是一个表达式。不太好,但您可以执行int-elementLoc。。。如果((elementLoc=contains(array,element1))>-1{…
。那么您只使用一个变量,仅在需要时计算。这太棒了。我不知道您可以指向那样的int
。Govind更快地提供了一个“更完整”的答案比你强,所以我接受他的,但这在我看来同样棒。我特别喜欢你没有实例化几个变量,我认为你不需要这样做(就像加文那样)。谢谢!
int pos;
if (contains(array, element1, &pos) > -1) {
// Here you can check pos for the position
} else if (contains(array, element2, &pos) > -1) {
// Here you can check pos as well...
}