AANN
AANN

Reputation: 11

Use a variable value as a part of array name

I've read other similar Questions. But, All of them use bash. IDK anything about that language. The Thing I want to do is:

int i=0;   //Value of i will change as I want to use it in loop
string name="c"+i;
double a= name[i]; //The real name of arrays I have declared are: c0[],c1[] etc

It gives error: "Project" does not contain a definition for "name" So, How do I acheive this?

Upvotes: 0

Views: 3236

Answers (2)

MakePeaceGreatAgain
MakePeaceGreatAgain

Reputation: 37000

Obviously you have a set of variables, all sharing a common name, e.g. MyVariable1, MyVariable2, etc.

Instead of having so many similar variables, you should use an array, or in your case an array of arrays:

var myVariableArray = new double[][] { c[0], c[1], ... };

Now you can easily acces the i-th number within that array:

double a = myVariableArray[i][i];

Alternativly if those variables actually are members (fields or propertiers) within your class, you can also use reflection to get the right member from a string:

var fields = typeof(MyType).GetField(name + i);
double b[];
if(field != null)
    b = (double[]) field.GetValue(instanceOfMyType, null);
else
{
    var prop = typeof(MyType).GetProperty(name + i);
    if(prop != null)
        b = (double[]) prop.GetValue(instanceOfMyType, null);
}
a = b[i];

However such a data-structure is bad design, you should go with an array (or list) of members, instead of having dozens of similar members.

Upvotes: 2

Sweeper
Sweeper

Reputation: 270790

You need an array of arrays (two-dimensional arrays), don't you?

To create an array of arrays, do this:

double[][] twoDArray = new double[][x];

where x is the number of arrays you want.

Now you can populate it with some arrays like this:

twoDArray[0] = new double[] {1.0, 1.1, 1.2};
twoDArray[1] = new double[] {7.7, 8.8, 9.9};

To access an array in the 2D array, you don't even need name, you just use i directly!

double[] oneOfTheArrays = twoDArray[i];
double a = oneOfTheArray[0];

Or more simply:

double a = twoDArray[i][0];

Upvotes: 1

Related Questions