Shoaib Mohamed
Shoaib Mohamed

Reputation: 120

String Array comparision and sorting

First off, i'd like to say that my programming knowledge is very basic and got a learn as you go style. So please bear with me if i sound stupid.

So i have a multi dimensional string array, a part of which is:

X       Y

4,1 Adelaide
4,2 Interlagos
4,3 Sakhir
4,4 Hungaroring
4,5 Estoril
4,6 Barcelona
4,7 Silverstone
4,8 Mugello
4,9 Hockenheim
4,10 Monte Carlo

In the above table, X and Y are the 2 dimensions of the array.

Now i have another string array with elements from X dimension of the above array in unsorted fashion. For example,

4,6
5,15
3,7
10,12

etc...

Now what i want to do is write a code which looks into array #2 and assigns a corresponding element from dimension Y of the array #1.

For example, when the code encounters 4,6 in array #2, i want the code to assign the corresponding value which is Barcelona.

Just the basic snippet or algorithm is what i'm looking for. I'll do the rest myself.

Thanks in advance!

Upvotes: 3

Views: 160

Answers (4)

Saeb Amini
Saeb Amini

Reputation: 24419

If you must receive your first set of data as a 2D array, here's how you can turn it into a dictionary:

Dictionary<string, string> dic = new Dictionary<string,string>();

for (int i = 0; i < firstArray.GetLength(0); i++)
{
    dic.Add(firstArray[i, 0], firstArray[i, 1]);
}

Upvotes: 1

XiaoChuan Yu
XiaoChuan Yu

Reputation: 4011

Not sure if I'm interpreting your question correctly here...

Your array #2, are you saying you want to replace its elements(say "4,6") with "Barcelona"?
If this is the case then:
Loop through array #2, for each element use String.split() to get the two numerical parts from it(ex. "4" and "6"). Then use Integer.parseInt() to convert them from String to ints(call them a,b) and use those ints as indexes to array #1 like array1[a][b] to get Y value.

I assume you really want to use an array because those numbers are small and bounded, otherwise use dictionary as suggest by other answers...

Upvotes: 1

hildensia
hildensia

Reputation: 1740

You should rather use a Dictionary for that. A dictionary is internally an array. If you hand over a key, value pair (to insert it) a so called hash function is applied to the key. This function returns an integer i. The value is than stored at array[i]. If you want to get a value from the Dictionary you hand over just the key. Internally the hash function is applied, i is computed and array[i] is returned. This sounds like very much overhead, but searching for the key is slow for large arrays (O(log n) if it is sorted by keys and O(n) if it is not sorted at all - if you know O notiation), where the hash function can be very fast in most applications. So even with large dictionaries accessing a value is fast. (There are some more tricks inside a dictionary, which handle the case that two keys result in the same integer i, but you don't have to care much about that, if you don't want to implement a dictionary yourself)

Dictionarys are also called maps or hashmaps in other languages.

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1502276

Sounds like table 1 should really be a Dictionary<string, string>, mapping "4,6" to "Barcelona". Then you can just do:

// However you want to populate your data
Dictionary<string, string> mapping = ...;

List<string> values = keys.Select(key => mapping[key]).ToList();

Note that this will throw an exception if any of the keys isn't mapped - if that's not what you want, please clarify the requirements.

It's not clear how you're getting this data, or whether your "multi-dimensional string array" is a string[,] or a string[][]. If you have to receive it as a string array, give us more details and we can explain how to convert that into the dictionary.

Upvotes: 6

Related Questions