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;
}


