Windows Phone 72011.11.16 16:14

CSV파일을 윈폰에서 읽을때 첫줄을 Skip 하고 싶을때 사용한다.

csv 첫줄에는 대부분 데이터들의 컬럼값 즉 메뉴 이름같은것이 들어가기때문에

첫줄을 제외한 나머지 데이터를 뽑을때 유용한다. 혹은 마지막데이터를 끊거나

풀 소스

/// <summary>
/// csv 파일을 읽을때 처음 한줄을 Skip 할때 사용
/// foreach문등에서 처음 인덱스와 끝의 인덱스를 감지 한다.
/// </summary>
public static class SkipData
{
    public class SkipFirst<T> : IEnumerable<T>
    {
        private IEnumerable<T> mEnum;

        public SkipFirst(IEnumerable<T> enm)
        {
            mEnum = enm;
        }

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            IEnumerator<T> iter = mEnum.GetEnumerator();
            if (iter.MoveNext())
            {
                while (iter.MoveNext())
                {
                    yield return iter.Current;
                }
            }
        }

        #endregion IEnumerable<T> Members

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion IEnumerable Members
    }

    public class SkipLast<T> : IEnumerable<T>
    {
        private IEnumerable<T> mEnum;

        public SkipLast(IEnumerable<T> enm)
        {
            mEnum = enm;
        }

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            IEnumerator<T> iter = mEnum.GetEnumerator();
            if (iter.MoveNext())
            {
                T curr = iter.Current;
                while (iter.MoveNext())
                {
                    yield return curr;
                    curr = iter.Current;
                }
            }
        }

        #endregion IEnumerable<T> Members

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        #endregion IEnumerable Members
    }

    static public SkipFirst<T> First<T>(IEnumerable<T> enm)
    {
        return new SkipFirst<T>(enm);
    }

    static public SkipLast<T> Last<T>(IEnumerable<T> enm)
    {
        return new SkipLast<T>(enm);
    }
}

참고 : http://honestillusion.com/blogs/blog_0/archive/2007/02/05/c-code-adding-skip-first-to-foreach.aspx

참고로 사용은 이렇게 한다.


foreach (var item in SkipData.First(StationsSplitData))
Posted by 동동(이재동)

댓글을 달아 주세요

Windows Phone 72011.03.15 12:58

보통 컬렉션 안의 컬렉션 즉 List문 안에 List문 이 있으면

 

중첩 foreach문을 쓴다.

 

그러면 코드가 길어지고 깔끔해지지가 않는다.

 

foreach (Contact _contact in contacts)
{
    _contact.ID = 0;
    _contact.GroupID = 0;
    _contact.CompanyID = 0;
}

 

이런 For문이 있을때는

 

contacts.ForEach(c => { c.ID = 0; c.GroupID = 0; c.CompanyID = 0; });

 

이렇게 바꾸면 된다.

 

만약 list안의 list를 보고 싶으면

그냥

 

_collectionBooks.Collectionbook.ToList().ForEach(i => i.Collection.ForEach( c => {CheckCollectBookSheetAllCoinCal(c);}));
 

이런식도 된다. ToList()뒤에 foreach 그리고 메소드를 만들어서 깔끔하게 돌렸다.

 

원래는 이런 for문 이였다. ㄷㄷㄷ

foreach (var item in _collectionBooks.Collectionbook)
            {
               foreach (var collect in item.Collection)
                {
         if (collect.Item != null)
            {    
                int haveCollectionCoinCount = 0;
                foreach (var coinInfo in collect.Item)
                {
                    var isHaveCollectionCoin = CollectionCoins.Where(c => c.cid == coinInfo.cid).FirstOrDefault();
                    if (isHaveCollectionCoin != null)
                    {
                        haveCollectionCoinCount++;
                    }
                }
 
                if (haveCollectionCoinCount == collect.Item.Count)
                {
                    SaveCompleteCollectBookSheetHistoryTime(collect.ID);
                }
            }
                }
            }
Posted by 동동(이재동)
TAG foreach, LINQ, WP7

댓글을 달아 주세요