[펌] 반복문 유틸
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 |