또 다시 glib 의 gptrarray 질문드립니다...;;
글쓴이: erich0929 / 작성시간: 일, 2014/02/23 - 4:46오후
참 저도 답답하네요...
저번에 올린 소스인데 또 함정에 빠진 느낌...
이번엔 sorting 질문입니다. 허접하더라도 양해바랍니다. 하하...
아래 소스에서 DATA 구조체의 item 이라는 필드를 기준으로 g_ptr_array_sort () 를 이용해서 sorting 하려 합니다.
하지만 전혀 sorting 되지 않고 입력한 자료 순서대로만 출력 되고 있습니다.
왜 g_ptr_array_sort () 가 작동하지 않을까요??
이번에도 부탁 드리겠습니다. ^^
1 #include <stdio.h> 2 #include <glib.h> 3 4 typedef struct _DATA { 5 int item; 6 char* name; 7 int price; 8 double value; 9 } DATA; 10 11 int compare_items (gpointer, gpointer); 12 void printAll (gpointer, gpointer); 13 14 DATA data [] = {{7143, "Aaaaa", 1231234, 235.5}, 15 {5231, "Bbbbb", 532458, 238.75}, 16 {8751, "Ccccc", 872654, 125.47}, 17 {2354, "Ddddd", 87542, 564.4}}; 18 19 int main(void) 20 { 21 GPtrArray* a = g_ptr_array_new (); 22 g_ptr_array_add (a, &data[0]); 23 g_ptr_array_add (a, &data[1]); 24 g_ptr_array_add (a, &data[2]); 25 g_ptr_array_add (a, &data[3]); 26 27 g_ptr_array_sort (a, (GCompareFunc) compare_items); 28 29 g_ptr_array_foreach (a, printAll, (gpointer) NULL); 30 31 return 0; 32 } 33 34 gint compare_items (gpointer a, gpointer b) { 35 36 DATA* alpha = (DATA *) a; 37 DATA* beta = (DATA *) b; 38 39 return (gint) (alpha->item - beta->item); 40 } 41 42 void printAll (gpointer a, gpointer b) { 43 DATA* alpha = (DATA*) a; 44 printf ("item : %d, name : %s, price : %d, value : %lf\n", alpha -> item, alpha -> name, alpha -> price, alpha -> value); 45 return; 46 }
출력 : item : 7143, name : Aaaaa, price : 1231234, value : 235.500000 item : 5231, name : Bbbbb, price : 532458, value : 238.750000 item : 8751, name : Ccccc, price : 872654, value : 125.470000 item : 2354, name : Ddddd, price : 87542, value : 564.400000
Forums:
자문자답이 되어 버렸네요...^^
어설픈 영어로 stackoverflow 에 물어봤는데 ...
십분만에 해결되었습니다.
혹시 궁금하신분들은 http://stackoverflow.com/questions/21970328/g-ptr-array-sort-not-working-help-me-please 참고하세요 ^^
Make it a better place...
댓글 달기