Re: Newbie : How to store 50 data elements effciently

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



On Wed, 30 Jan 2008 16:11:23 -0800, indtaz@xxxxxxxxx <indtaz@xxxxxxxxx> wrote:

[...]
a ) I have 5 State(s) names. eg..Ohio, Iowa, Michigan,
Illinois,Kentucky
b) For each State, I have a list of cities that I need to store...
eg Illinois -> Chicago, etc..
Michigan -> Dearborn etc...

Is creating a 5x10 array and storing the information, a good way to go
about doing this...or is there a better/more efficient way to do
this...

I have looked at the concept of 'structs'..but I dont seemed to have
fully understood how to go about using them...

All due respect, you need to be reasonably familiar with both structs and classes before you try to do anything of import in C#. (Likewise any similar data structures that might exist in any language you might be using). They are fundamental to the use of the language, and if you don't understand how a struct or a class works, you're not ready to try to write a program that does something useful (obviously there are lots of more basic programs that you might write, and which in fact would be a worthwhile exercise as you learn about the language).

Now, all that said, it seems to me that a multi-dimensional array isn't really what you want here. It would work (though it's not clear from your question that only being able to store 10 city names is acceptable), but it's somewhat crude compared to the alternatives.

The most basic solution would be to have five named arrays:

string[] rgstrOhio = { "Cincinatti", "Akron", "Cleveland" };
string[] rgstrIowa = { "Iowa City", "Des Moines", "Dubuque" };
// etc.

(of course, you are not limited to three cities for each state...you can put as many into each array as you like).

Unless you already have a natural mapping from a state name to an index, I think this would be at least as good as a multi-dimensional array, if not better. I suppose that if you did already have a direct mapping from state name to index, you could do something like this:

string[][] rgrgstrCities = { { "Cincinatti", "Akron", "Cleveland" },
{ "Iowa City", "Des Moines", "Dubuque" },
// etc. };

But then you'd have to get the city arrays by indexing the rgrgstrCities array with an integer derived from the state name. IMHO, it's better if you can just use the state name directly, at least assuming that you actually care about the state name at all.

If you want to be able to look up a given list of cities by state name and don't want a hard-coded switch() statement or require an explicit mapping from a state name to an integer as above or something like that, you could use a Dictionary<>:

Dictionary<string, string[]> dictCitiesOfStates = new Dictionary<string, string>();

dictCitiesOfStates.Add("Ohio", new string[] { "Cincinatti", "Akron", "Cleveland" });
dictCitiesOfStates.Add("Iowa", new string[] { "Iowa City", "Des Moines", "Dubuque" });
// etc.

There are other collection types as well. For example, instead of a string[], you could use a List<string>, which would allow you to add or remove states dynamically much more simply than would be possible with a string[]. Or, you could use a Dictionary<> also for that collection, which would allow you to associate some specific data with each city.

Frankly, how best to store this data has a lot more to do with how you're going to use the data than it does with what the data actually is. So far, all you've really told us is the latter, so vague answers like those above are about as good as we can do, without more information.

Pete
.



Relevant Pages

  • Re: Simple Loop
    ... Cities in 3 columns: ... So I need to rearrange the array of strings so that my Display Loop ... Note that the expressions for row and col could be substituted ...
    (sci.math)
  • Re: [C++] using arrays in a class
    ... you cannot use your Cities class in a GUI program. ... You do not allocate storage for your array. ... This has undefined behavior since you haven't initialized 'city'. ... Do not use literal constants. ...
    (comp.programming)
  • Re: Simple Loop
    ... I have an array of strings. ... The loop that displays the cities do it the following way: ... Madrid New York Paris ...
    (sci.math)
  • Re: Loop. How can I do this?
    ... I have an array of strings. ... The loop that displays the cities do it the following way: ... London Madrid ...
    (comp.soft-sys.matlab)
  • Re: classes and using *
    ... What if you expand the array to 5 billion and they enter 5 ... string *city is far worse than string cityin that there is NO SPACE ... for storing the cities. ... crashes when you try to store data through a wild pointer. ...
    (comp.lang.cpp)