Sign in to follow this  
ysg

How to copy a 1-D array into a 2-D array

Recommended Posts

ysg    192
What I'd like to do is to have a 2-D array and then populate that using a loop at only one interval the rest of the rows for each column. How can I do that?

In my case I'm getting this error in the first for-loop:
: Error CS1502: The best overloaded method match for `System.Array.Copy(System.Array, System.Array, int)' has some invalid arguments (CS1502) (test)
namespace test
{
  class MainClass
  {
    public static void Main (string[] args)
    {
      double [,] test_array = new double[4, 4];
      double [] source_array = {1, 2, 3, 4};

      for(int i = 0; i < test_array.GetUpperBound(0); i++)
      {
        System.Array.Copy(source_array, test_array[i, 0], 5);
      }

      for(int x = 0; x < 4; x++)
      {
        for(int y = 0; y < 4; y++)
        {
          System.Console.Write(test_array[x, y]);
          System.Console.Write(" ");
        }

        System.Console.WriteLine();
      }

      // let's write more code, not less.
      System.Threading.Thread.Sleep(10000);
    }
  }
}

Share this post


Link to post
Share on other sites
unbird    8338

Nope, test_array is 2D, so test_array[i] isn't legal. Also, you can't use Array.Copy to copy between arrays [url="http://msdn.microsoft.com/en-us/library/z50k9bft.aspx"]with different dimensions[/url].

 

There's no other way than to copy manually with a double loop, unfortunately. At least as far as I know.

Edited by unbird

Share this post


Link to post
Share on other sites
markspend001    100

Hey Guys according to that i find a code like:

 

include <iostream>
using namespace std;
#define MAX 10
int A1D[MAX];
int A2D[MAX][MAX];
int main()
{
//Init A1D Array
for (int i=0;i<MAX;i++) A1D[i]=i+1;
//Convert to A2D
for (int i=0;i<MAX;i++)
for (int j=0;j<MAX;j++)
if (j+1<=A1D[i]) A2D[i][j]=A1D[i];
else A2D[i][j]=0;
return 0;
}

Share this post


Link to post
Share on other sites
rafciok_6    119

Hope this is what you was looking for

 

namespace test
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            double[,] test_array = new double[4, 4];
            double[] source_array = { 1, 2, 3, 4 };

            for (int i = 0; i < 4; i++)
            {
                test_array[0, i] = source_array[i];
                
            }

            for (int x = 0; x < 4; x++)
            {
                for (int y = 0; y < 4; y++)
                {
                    System.Console.Write(test_array[x, y]);
                    System.Console.Write(" ");
                }

                System.Console.WriteLine();
            }

            // let's write more code, not less.
            System.Threading.Thread.Sleep(10000);
        }
    }
}

Share this post


Link to post
Share on other sites
Nypyren    12074
Beware: GetUpperBound returns the last valid index for that rank, NOT the length. You want GetLength instead if you're using < in your loop. Edited by Nypyren

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this