2014-09-23 4 views
0

날짜, 월 및 연도의 값을 가진 DateString 배열이 있습니다.DateArray에서 NSDictionary를 월 단위로 만들기

이제 오름차순으로 정렬했습니다. 지금은이 키 - 값 쌍으로 사전에 넣어 가지고있다 -

- "1월"(월 이름) 및 : - 그 달의 날짜의 배열

할 수있는 사람 이걸하는 법을 제안 해주세요.

+0

왜 NSDate 객체 대신 날짜 문자열 배열이 있습니까? 이 작업과 그 배열을 포함하는 다른 모든 작업을 훨씬 쉽게 할 수 있습니다. – trojanfoe

+0

웹 서버에서 오는 것이므로 날짜를 말하면서 많은 것들의 가치를 얻는 모델을 만들었습니다. 그 중 하나가 날짜이므로 nsstring 형식으로 유지했습니다. NSString 대신 NSDate가 있으면 여기에서 도움이 될까요? –

+0

그래; 항상 가장 적합한 데이터 유형을 사용하여 데이터를 저장합니다. – trojanfoe

답변

0
 NSCalendar *calendar = [NSCalendar currentCalendar]; 
     NSDateComponents *components = [[NSDateComponents alloc] init]; 

     // Set your year and month here 
     [components setYear:2016]; 

     NSMutableDictionary *dayAndMonthWiseList = [[NSMutableDictionary alloc] init]; 
     for (int i=1; i<=12; i++) 
     { 
      [components setMonth:i]; 

      NSDate *date = [calendar dateFromComponents:components]; 
      NSRange range = [calendar rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date]; 
      NSMutableArray *dayList = [[[NSMutableArray alloc] init] mutableCopy]; 

      for (int j=1; j<=range.length; j++) 
      { 
       [dayList addObject:[NSString stringWithFormat:@"%d",j]]; 
      } 
      [dayAndMonthWiseList setObject:dayList forKey:[NSString stringWithFormat:@"%d",i]]; 
     } 
     NSLog(@"Dic. :%@",dayAndMonthWiseList); 

결과는 다음과 같습니다

Dic. :{ 
    1 =  (
     1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    10 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    11 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30 
    ); 
    12 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    2 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29 
    ); 
    3 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    4 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30 
    ); 
    5 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    6 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30 
    ); 
    7 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    8 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30, 
     31 
    ); 
    9 =  (
     1, 
     2, 
     3, 
     4, 
     5, 
     6, 
     7, 
     8, 
     9, 
     10, 
     11, 
     12, 
     13, 
     14, 
     15, 
     16, 
     17, 
     18, 
     19, 
     20, 
     21, 
     22, 
     23, 
     24, 
     25, 
     26, 
     27, 
     28, 
     29, 
     30 
    ); 
} 
0

당신은 코드를 작성, 모두가하는 것처럼.

(년, 월)부터 (배열)까지 사전이 필요합니다.

빈 가변적 인 사전으로 시작합니다. 그런 다음 항목을 반복합니다. 각 항목에 대해 년과 월을 얻으십시오 (저는 서로 다른 해의 1 월을 함께 사용하지 않기를 희망합니다). 사전에서 년/월을 찾아 가변 배열 값을 가져옵니다. 거기에 없으면 값으로 새로운 변경 가능 배열이있는 (년, 월) 키를 추가하십시오. 이제 (year, month) 배열을 가지고 그 배열에 항목을 추가하십시오.

데이터가 그 시점에서 고정되면 사전을 반복하고 모든 변경 가능한 배열을 변경 불가능한 배열로 바꿀 수 있습니다 (copy 만 사용하십시오). 그리고 모든 항목을 먼저 정렬하는 대신 사전의 키를 정렬하여 월 및 연도별로 정렬 한 다음 정렬이 필요할 때 정렬 할 수 있습니다. 예를 들어, 테이블 뷰에서는 실제로 표시되는 배열 만 정렬하면됩니다.

관련 문제