我有一个身体看起来很像这样的功能:
if (contains(array, element1) > -1){
// do something
} else if (contains(array, element2) > -1) {
// do something
} else if (contains(array, element3) > -1) {
// do someting
}...
函数contains
将遍历我的数组,并检查它是否包含我传递给它的element
并返回它的位置(如果存在)或-1(如果不存在) 。
在我的// do something
部分中,我需要此元素在数组中的位置。我可以通过几种不同的方式来做到这一点:
contains()
函数来获取职位。 我可以定义几个定义为包含函数返回的变量,然后在我的if-else块中检查它们。像这样:
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 array[2]
,无论元素是否在其中,array[0]
等于0
或1
。否,然后array[1]
将等于实际位置,使代码看起来像这样:
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语句。 解决方案一将搜索我的数组至少两次。解决方案二将至少搜索我要查找的元素的次数。解决方案3也许是最好的,但也许不是最优雅的。解决方案4将运行每个if语句...
仅搜索一次的最佳方法是什么?我是否应该编写一个函数,将需要的所有内容都返回给一个包含每个元素位置的数组?我在想什么吗?
答案 0 :(得分:2)
我将修改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 elem1loc, elem2loc, elem3loc;
if(contains(data, val1, &elem1loc))
// use elem1loc...
if(contains(data, val2, &elem2loc))
// use elem2loc...
答案 1 :(得分:2)
您可以传递一个指向int
的指针,当包含函数找到一个元素时,该指针将被填充。然后,可以在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...
}
答案 2 :(得分:1)
这里的解决方案根本不需要您修改contains
:
int pos;
if ((pos = contains(array, element1)) > -1) {
// do something with pos
} else if ((pos = contains(array, element2)) > -1) {
// do something with pos
} else if ((pos = contains(array, element3)) > -1) {
// do something with pos
}
之所以可行,是因为大多数命令式语言中的变量赋值是一个表达式。