ArrayList.ToArray question

G

GB

Hello:
I have ArrayList strat_list of integers like this:

index value

[0] 3
[1] 4
[2] 2
[3] 1
[4] 6
[5] 4
[6] 3
[7] 2
[8] 5
[9] 8
[10] 6
[11] 2

I want to put the content of the list in 2 dimensional array to get a
matrix like this:
3421
6432
5862
This is what I am doing:
int k = 4;
int[,] myArr = new int[strat_list.Count,k];
myArr = (int[,])strat_list.ToArray(typeof(int[,]));

But it gives me InvalidCastException error.
Could you give me a hint how to fix the problem?

Thanks,
GB
 
B

Bruce Wood

GB said:
Hello:
I have ArrayList strat_list of integers like this:

index value

[0] 3
[1] 4
[2] 2
[3] 1
[4] 6
[5] 4
[6] 3
[7] 2
[8] 5
[9] 8
[10] 6
[11] 2

I want to put the content of the list in 2 dimensional array to get a
matrix like this:
3421
6432
5862
This is what I am doing:
int k = 4;
int[,] myArr = new int[strat_list.Count,k];
myArr = (int[,])strat_list.ToArray(typeof(int[,]));

But it gives me InvalidCastException error.
Could you give me a hint how to fix the problem?

You have to write the loops yourself; this is not such a common problem
that the Framework methods will do it for you.

for (int i = 0; i < (strat_list.Count + 3) / 4; i++)
{
for (int j = 0; j < 3; j++)
{
int k = i * 4 + j;
if (k < strat_list.Count)
{
myArr[i, j] = strat_list[k];
}
else
{
myArr[i, j] = 0; // or whatever the default should be
}
}
}
 
G

GB

Thank you,
It gives me the 2 dimensional array of 12 by 4.
Can I get the array of 3 by 4 ( to eleminate rows with 0's)?

GB

Bruce Wood said:
Hello:
I have ArrayList strat_list of integers like this:

index value

[0] 3
[1] 4
[2] 2
[3] 1
[4] 6
[5] 4
[6] 3
[7] 2
[8] 5
[9] 8
[10] 6
[11] 2

I want to put the content of the list in 2 dimensional array to get a
matrix like this:
3421
6432
5862
This is what I am doing:
int k = 4;
int[,] myArr = new int[strat_list.Count,k];
myArr = (int[,])strat_list.ToArray(typeof(int[,]));

But it gives me InvalidCastException error.
Could you give me a hint how to fix the problem?

You have to write the loops yourself; this is not such a common problem
that the Framework methods will do it for you.

for (int i = 0; i < (strat_list.Count + 3) / 4; i++)
{
for (int j = 0; j < 3; j++)
{
int k = i * 4 + j;
if (k < strat_list.Count)
{
myArr[i, j] = strat_list[k];
}
else
{
myArr[i, j] = 0; // or whatever the default should be
}
}
}
 
B

Bruce Wood

Bruce said:
GB said:
Hello:
I have ArrayList strat_list of integers like this:

index value

[0] 3
[1] 4
[2] 2
[3] 1
[4] 6
[5] 4
[6] 3
[7] 2
[8] 5
[9] 8
[10] 6
[11] 2

I want to put the content of the list in 2 dimensional array to get a
matrix like this:
3421
6432
5862
This is what I am doing:
int k = 4;
int[,] myArr = new int[strat_list.Count,k];
myArr = (int[,])strat_list.ToArray(typeof(int[,]));

But it gives me InvalidCastException error.
Could you give me a hint how to fix the problem?

You have to write the loops yourself; this is not such a common problem
that the Framework methods will do it for you.

for (int i = 0; i < (strat_list.Count + 3) / 4; i++)
{
for (int j = 0; j < 3; j++)
{
int k = i * 4 + j;
if (k < strat_list.Count)
{
myArr[i, j] = strat_list[k];
}
else
{
myArr[i, j] = 0; // or whatever the default should be
}
}
}

Sorry... should have been "for (int j = 0; j < 4; j++)" not j < 3.
 
B

Bruce Wood

The problem here is most likely in your array allocation, at the start.
Try this:

int numRows = (strat_list.Count + 3) / 4;
int[,] myArr = new int[numRows,4];
for (int i = 0; i < numRows; i++)
....

(Instead of "for (int i = 0; i < (strat_list.Count + 3) / 4; i++)".
Also, note my other post that the "j" loop should have been "for (int j
= 0; j < 4; j++)", not j < 3.)
Thank you,
It gives me the 2 dimensional array of 12 by 4.
Can I get the array of 3 by 4 ( to eleminate rows with 0's)?

GB

Bruce Wood said:
Hello:
I have ArrayList strat_list of integers like this:

index value

[0] 3
[1] 4
[2] 2
[3] 1
[4] 6
[5] 4
[6] 3
[7] 2
[8] 5
[9] 8
[10] 6
[11] 2

I want to put the content of the list in 2 dimensional array to get a
matrix like this:
3421
6432
5862
This is what I am doing:
int k = 4;
int[,] myArr = new int[strat_list.Count,k];
myArr = (int[,])strat_list.ToArray(typeof(int[,]));

But it gives me InvalidCastException error.
Could you give me a hint how to fix the problem?

You have to write the loops yourself; this is not such a common problem
that the Framework methods will do it for you.

for (int i = 0; i < (strat_list.Count + 3) / 4; i++)
{
for (int j = 0; j < 3; j++)
{
int k = i * 4 + j;
if (k < strat_list.Count)
{
myArr[i, j] = strat_list[k];
}
else
{
myArr[i, j] = 0; // or whatever the default should be
}
}
}
 

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

Top