Passing one Dimension of a Two Dimensional Array in C#

后端 未结 6 935
耶瑟儿~
耶瑟儿~ 2021-01-21 07:31

I have moved from C to C#. I have a function which accepts an array. I want to pass one dimension of a Two Dimensional array to this function.

C Code would be:-

相关标签:
6条回答
  • 2021-01-21 07:39

    A primitive way would be:

    var dimNumber = 1;
    
    int[] oneDimension = new int[50];
    
    for(var i=0; i<50; i++)
    {
       oneDimension[i] = Client_ID[dimNumber][i];
    }
    
    array_processing ( ref oneDimension);
    

    I would suggest using Lambda expressions like in the way 5 of zmbq's answer.

    0 讨论(0)
  • 2021-01-21 07:42

    You could declare you array as

    int[][] Client_ID = new[] { new int[50], new int[50], new int[50] };
    

    and then you can pass it to your array_processing function

    array_processing(ref Clinet_ID[1]);
    

    Sorry for miss of my pen.

    0 讨论(0)
  • 2021-01-21 07:50

    Just declare method

    private void ParseArray(int[,] ar)
    {
        // Some work...
    }
    
    • UDP: Code format
    0 讨论(0)
  • 2021-01-21 07:56

    You can use a jagged array

    // Initialize jagged array
    int[][] clientID = new int[3][];
    for (int i=0; i<clientId.Length; i++)
    {
       clientId[i] = new int[50];
    }
    
    array_processing(ref clientId[1]);
    

    And your method:

    private void array_processing(ref int[] subArray);
    
    0 讨论(0)
  • 2021-01-21 08:01

    Late to the conversation, but here is a jagged array example to do this:

    string[][] rows = GetStringArray(values);
    string[] row = rows[0];
    

    You would set up your jagged array something like:

    // rowCount from runtime data
    stringArray = new string[rowCount][];
    
    for (int index = 0; index < rowCount; index++)
    {
        // columnCount from runtime data
        stringArray[index] = new string[columnCount];
    
        for (int index2 = 0; index2 < columnCount; index2++)
        {
            // value from runtime data
            stringArray[index][index2] = value;
        }
    }
    
    0 讨论(0)
  • 2021-01-21 08:02

    You can't really do that. C# is less outgoing about its arrays, and prevents you from doing C-like manipulations. This is a good thing.

    You have various options:

    1. Create a 1D array and copy your 2D row to it.
    2. Use a jagged array - an array of arrays, which is more like what C lets you do.
    3. Have an array_processing overload that takes a 2D array and a row number.

    4. If you really want to access a 2D row as a 1D array, you should create a 'RowProxy' class that will implement the IList interface and let you access just one row:

      class RowProxy<T>: IList<T>
      {
          public RowProxy(T[,] source, int row)
          { 
             _source = source;
             _row = row;
          }
      
          public T this[int col]
          {
              get { return _source[_row, col]; } 
              set { _source[_row, col] = value; }
          }
      
          private T[,] _source;
          private int _row;
      
          // Implement the rest of the IList interface
      }
      
    5. Use a lambda expression that will lose the array semantics, but is rather cool:

      var ClientId = ...;
      
      var row_5_accessor = (c=>ClientId[5, c]);
      

      You can use row_5_accessor as a function, row_5_accessor(3) will give you ClientId[5, 3]

    0 讨论(0)
提交回复
热议问题