[펌] 반복문 유틸
Programming/C# / 2016. 12. 7. 17:54
// 반복문 관련
// For Array
public static void ForToArray(T[] pArray, Action pCallback)
{
if (null == pArray)
return;
if (null == pCallback)
return;
int iMaxCount = pArray.Length;
for (int iLoop=0; iLoop < iMaxCount; ++iLoop)
{
pCallback(pArray[iLoop]);
}
}
// For Enum
public static void ForToEnum(Action pCallback)
{
var pEnumerator = Enum.GetValues(typeof(T)).GetEnumerator();
while (pEnumerator.MoveNext())
{
pCallback((T)pEnumerator.Current);
}
}
// For List
public static void ForToList(List pList, Action pCallback)
{
if (null == pList)
return;
if (null == pCallback)
return;
int iMaxCount = pList.Count;
for (int iLoop = 0; iLoop < iMaxCount; ++iLoop)
{
pCallback(pList[iLoop]);
}
}
public static void ForToList(List pList, Func pCallback)
{
if (null == pList)
return;
if (null == pCallback)
return;
int iMaxCount = pList.Count;
for (int iLoop = 0; iLoop < iMaxCount; ++iLoop)
{
if (true == pCallback(pList[iLoop]))
break;
}
}
// For Dictionary
public static void ForToDic(Dictionary pDic, Action pCallback)
{
if (null == pDic)
return;
if (null == pCallback)
return;
var pEnumerator = pDic.GetEnumerator();
while (pEnumerator.MoveNext())
{
var kvp = pEnumerator.Current;
pCallback(kvp.Key, kvp.Value);
}
}
public static void ForToDic(Dictionary pDic, Func pCallback)
{
if (null == pDic)
return;
if (null == pCallback)
return;
var pEnumerator = pDic.GetEnumerator();
while (pEnumerator.MoveNext())
{
var kvp = pEnumerator.Current;
if (true == pCallback(kvp.Key, kvp.Value))
break;
}
}
// For One
public static void For(int iStartIndex, int iMaxIndex, Action pCallback)
{
for (int iLoop = iStartIndex; iLoop pCallback)
{
for (int iLoop = iStartIndex; iLoop < iMaxIndex; ++iLoop)
{
if (true == pCallback(iLoop))
break;
}
}
// For Double
public static void ForToDouble(int iMaxToFirst, int iMaxToSecond, Action pCallback)
{
for (int iLoop1 = 0; iLoop1 < iMaxToFirst; ++iLoop1)
{
for (int iLoop2 = 0; iLoop2 < iMaxToSecond; ++iLoop2)
pCallback(iLoop1, iLoop2);
}
}
public static void ForToDouble(int iMaxToFirst, int iMaxToSecond, Func pCallback)
{
for (int iLoop1 = 0; iLoop1 < iMaxToFirst; ++iLoop1)
{
for (int iLoop2 = 0; iLoop2 < iMaxToSecond; ++iLoop2)
{
if (true == pCallback(iLoop1, iLoop2))
return;
}
}
}
// Inverse For Double
public static void ForInverseToDouble(int iMaxToFirst, int iMaxToSecond, Action pCallback)
{
for (int iLoop1 = iMaxToFirst; iLoop1 >= 0; --iLoop1)
{
for (int iLoop2 = iMaxToSecond; iLoop2 >= 0; --iLoop2)
pCallback(iLoop1, iLoop2);
}
}
public static void ForInverseToDouble(int iMaxToFirst, int iMaxToSecond, Func pCallback)
{
for (int iLoop1 = iMaxToFirst; iLoop1 >= 0; --iLoop1)
{
for (int iLoop2 = iMaxToSecond; iLoop2 >= 0; --iLoop2)
{
if (true == pCallback(iLoop1, iLoop2))
return;
}
}
}
[출처] 이상호
반응형
'Programming > C#' 카테고리의 다른 글
| [C#] Attribute : Obsolete - 더 이상 사용하지 않거나 그럴 예정인 코드에 대해서 (0) | 2017.05.10 |
|---|---|
| [펌] string을 byte[] 배열로 변환? (0) | 2017.01.10 |
| [펌] Loop Dictionary (0) | 2016.12.07 |
| [펌] String -> enum 변환 (0) | 2016.05.23 |
| [C#] 시간체크(Stopwatch) (0) | 2015.09.15 |
