Go Down

Topic: Get array value index by searching value (Read 12414 times)previous topic - next topic

lyron

Sep 01, 2012, 07:18 pm
In a project i'm making, i need to use arrays. Now i have a question:
Is there a way to find a value's index just by searching for the value?

For example:

int arrayVals[] = {2, 4, -8, 3, 5, 1};

Now for example when i input "-8" into a function, i need it to return the index of -8, which is 2. How would i go about doing that?

Oh and how can i get the length of an array?

WizenedEE

#1
Sep 01, 2012, 07:26 pm
To do inverse lookup you need to traverse the array
Code: [Select]
`const int arysz = 6;int ary[arysz] = {4, 32, 6, 2, -1, 5}int wantedval = -1;int wantedpos;for (int i=0; i<arysz; i++) {   if (wantedval = ary[i]) {     wantedpos = i;     break;   }}`
If they're in order, you can also do a binary search (google it)

For finding array length, the best method is to use the above method and store a separate variable for the length. However, this works, too
Code: [Select]
`int ary[12];int len = sizeof(ary)/sizeof(ary[0])`

lyron

#2
Sep 01, 2012, 07:30 pm

To do inverse lookup you need to traverse the array
-code-

Thank you. Now what happens when i search for a value that isn't in the array?

Grumpy_Mike

#3
Sep 01, 2012, 07:38 pm
Then wantedval = -1 and you know you didn't find it.
Note make the initial value of wantedval outside the range of numbers you are expecting in the array.

lyron

#4
Sep 01, 2012, 07:42 pm
Will this code work if i expand the array during execution of the code?

AWOL

#5
Sep 01, 2012, 07:42 pm
If your array is ordered, you can shorten search times by doing a binary search.
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.
I speak for myself, not Arduino.

lyron

#6
Sep 01, 2012, 07:44 pm

If your array is ordered, you can shorten search times by doing a binary search.

It's not ordered.

Grumpy_Mike

#7
Sep 01, 2012, 07:49 pm
Quote
Will this code work if i expand the array during execution of the code?

You can't do that, the array size is fixed by:-
Code: [Select]
`int ary[arysz] = {4, 32, 6, 2, -1, 5}`
You can't expand this once it has been set.

Go Up