블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

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
2006. 10. 8. 15:13 Programing/Smalltalk

WorkSpace 에서 끄적거리기 두번째....

select: 의 활용

housekeepingbook := OrderedCollection  new.

housekeepingbook
add: #('복권' -5000 '2005-09-21') asOrderedCollection;
add: #('복권당첨' 50000 '2006-09-21') asOrderedCollection;
add: #('두부' -500 '2006-09-22') asOrderedCollection;
add: #('피자' -15000 '2006-09-23') asOrderedCollection;
add: #('보너스' 100000 '2004-09-24') asOrderedCollection;
add: #('화장지' -7000 '2006-09-24') asOrderedCollection;
add: #('전기세' -25000 '2006-09-24') asOrderedCollection;
add: #('키보드' -15000 '2005-09-25') asOrderedCollection;
add: #('화장품' -55000 '2006-09-25') asOrderedCollection;
add: #('전구' -500 '2004-09-26') asOrderedCollection.

"1.housekeepingbook의 3번째 원소를 Date객체로 바꾸기"
housekeepingbook do: [:each | each at: 3 put: (Date fromString: (each at: 3))].

"2.2004년 항목만 추출"
housekeepingbook select: [:each | (each at: 3) year = 2004].

"3.2004년의 금액 합계"
(housekeepingbook select: [:each | (each at: 3) year = 2004]) inject: 0 into: [:sum :item|  sum + (item at: 2) ].

"4.각 항목들의 요일"
housekeepingbook collect: [:each | (each at: 3) weekday].


"5.category 객체 생성 & 전기세의 항목 이름"
categories := OrderedCollection new.
categories
add: #('두부' '피자' '김치') -> '식료품';
add: #('복권' '복권당첨' '적금') -> '투자';
add: #('월급' '보너스') -> '급여';
add: #('전기세' '수도세') -> '생활요금';
add: #('화장지' '키보드' '화장품' '전구') -> '소모품'.

(categories detect: [:each | each key includes: '전기세']) value.

"6.각 항목의 분류"
housekeepingbook collect: [:item | (categories detect: [:each | each key includes: (item at: 1) ]) value].

"7.소모품으로 분류되는 항목의 합"
(housekeepingbook select: [:each | (categories detect: [:cat | cat value = '소모품']) key includes: (each at: 1) ])
inject: 0 into: [:sum :item | sum + (item at: 2)].

"8.2006년의 소모품의 합"
((housekeepingbook select: [:each | (categories detect: [:cat | cat value = '소모품']) key includes: (each at: 1) ])
select: [:each | (each at: 3) year = 2006]) inject: 0 into: [:sum :item | sum + (item at: 2) ].

"9.원금"
pocketMoney := 4000000.
housekeepingbook inject: pocketMoney into: [:sum :item | sum + (item at: 2) ].

'Programing > Smalltalk' 카테고리의 다른 글

가계부 만들기 - 04  (0) 2006.10.08
가계부 만들기 - 03  (0) 2006.10.08
가계부 만들기 - 01  (0) 2006.10.08
변수와 메세지 그리고 이벤트...  (0) 2006.05.15
재밌다...  (0) 2006.05.07
posted by 초딩입맛제주아재