C# - 2차원 배열 쪼개기

ChartFX에 쓰려고 2차원 배열 관련된 메소드 몇개 만든것중에 하나입니다.
DB등에서 한번 쿼리하고, 결과를 쪼개서 여러개의 ChartFX Data로 넣을때 사용했었습니다.

     0 1 2 3 4 5                                    0 1 2
   +-------------                                 +------
 0 | a 1 2 3 4 5   --- GetRangedArrayPart --->  0 | a 3 4
 1 | b 6 7 8 9 0       (array, 1, 3, 4)         1 | b 8 9
 2 | c i j k l m                                2 | c k l

코드는 아래와 같습니다.

/// <summary>
/// 2차원 배열에서 일부 구간을 추출한다.
/// </summary>
/// <param name="pArray">원본 2차원 배열</param>
/// <param name="pTitleColCount">타이틀 갯수 (ex:차트에서 X축에서 사용될 항목)</param>
/// <param name="pDataStartIndex">추출할 data의 시작 인덱스 (인덱스는 0부터)</param>
/// <param name="pDataEndIndex">추출할 data의 끝 인덱스 (인덱스는 0부터)</param>
/// <returns></returns>
public string[,] GetRangedArrayPart(string[,] pArray, int pTitleColCount, int pDataStartIndex, int pDataEndIndex)
{
    if (pArray == null)
        throw new Exception("배열이 null 입니다.");
    if (pArray.Rank != 2)
        throw new Exception("2차원 배열이 아닙니다.");
    if (pDataStartIndex > pDataEndIndex)
        throw new Exception("start, end 조건이 잘못되었습니다.");


    int colCount = pTitleColCount + pDataEndIndex - pDataStartIndex + 1;
    int colCountTemp = 0;
    string[,] rtn = new string[pArray.GetLength(0), colCount];
    for (int i = 0; i < pArray.GetLength(0); i++)
    {
        colCountTemp = 0;

        for (int j = 0; j < pArray.GetLength(1); j++)
        {
            if (j < pTitleColCount)
                rtn[i, colCountTemp++] = pArray[i, j];
            else if (j >= pDataStartIndex && j <= pDataEndIndex)
                rtn[i, colCountTemp++] = pArray[i, j];
        }
    }

    return rtn;
}

 

댓글 남기기