What is the best way to search for a set of values within a multi-dimenstional array?

B

Bill

suppose I have a table with 3 columns: A, B, C, and has the following
values:

A B C
1 2 3
4 5 6
7 8 9

I want to know what is the best way to find whether there is a row in
a table that contains 3 different values regardless of the orders they
are entered. For example, if I enter the search values (5,6,4) or
(4,5,6) or (4,6,5), or (5,4,6), the search should return true (row 2).

Any suggestions?
 
A

Andy Fish

Bill said:
suppose I have a table with 3 columns: A, B, C, and has the following
values:

A B C
1 2 3
4 5 6
7 8 9

I want to know what is the best way to find whether there is a row in
a table that contains 3 different values regardless of the orders they
are entered. For example, if I enter the search values (5,6,4) or
(4,5,6) or (4,6,5), or (5,4,6), the search should return true (row 2).

Any suggestions?

keep a sorted copy of each row, then you can sort the input criteria and
match it up against each row by checking for equality

If you keep the values as Integer objects rather than primitive 'int's, you
can have an ArrayList for each row, then use collections.sort to sort each
individual row. Keep them all in a hashset then you can use the contains()
method to see if you have a match.

not very efficient in memory use, but saves you writing your own sort and
search logic.

Andy
 
J

Jean Charbonneau

Bill said:
suppose I have a table with 3 columns: A, B, C, and has the following
values:

A B C
1 2 3
4 5 6
7 8 9

I want to know what is the best way to find whether there is a row in
a table that contains 3 different values regardless of the orders they
are entered. For example, if I enter the search values (5,6,4) or
(4,5,6) or (4,6,5), or (5,4,6), the search should return true (row 2).

Any suggestions?

I'd loop on first column and check if there is a corresponding value, then
keep all the rows which contained one, and repeat same operation with second
row, etc.. Use a quicksort for the search ( by doing a temporary array )

Sounds good to me. Could be wrong :) Just giving ideas in case you need
some.
 
B

Bill

Andy:

It works perfectly. Thanks.

Bill

Andy Fish said:
keep a sorted copy of each row, then you can sort the input criteria and
match it up against each row by checking for equality

If you keep the values as Integer objects rather than primitive 'int's, you
can have an ArrayList for each row, then use collections.sort to sort each
individual row. Keep them all in a hashset then you can use the contains()
method to see if you have a match.

not very efficient in memory use, but saves you writing your own sort and
search logic.

Andy
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top