函数
GLibPtrArraysort_with_data
声明 [src]
void
g_ptr_array_sort_with_data (
GPtrArray* array,
GCompareDataFunc compare_func,
gpointer user_data
)
描述 [src]
类似于 g_ptr_array_sort(),但是比较函数有一个额外的用户数据参数。
注意,g_ptr_array_sort_with_data()的比较函数不接收数组的指针作为参数,它接收数组指针的指针。
如果您想使用正常的 GCompareDataFuncs,请使用 g_ptr_array_sort_values_with_data(),否则这里是一个完整的用法示例。
typedef enum { SORT_NAME, SORT_SIZE } SortMode;
typedef struct
{
gchar *name;
gint size;
} FileListEntry;
static gint
sort_filelist (gconstpointer a, gconstpointer b, gpointer user_data)
{
gint order;
const SortMode sort_mode = GPOINTER_TO_INT (user_data);
const FileListEntry *entry1 = *((FileListEntry **) a);
const FileListEntry *entry2 = *((FileListEntry **) b);
switch (sort_mode)
{
case SORT_NAME:
order = g_ascii_strcasecmp (entry1->name, entry2->name);
break;
case SORT_SIZE:
order = entry1->size - entry2->size;
break;
default:
order = 0;
break;
}
return order;
}
...
g_autoptr (GPtrArray) file_list = NULL;
SortMode sort_mode;
// initialize file_list array and load with many FileListEntry entries
...
// now sort it with
sort_mode = SORT_NAME;
g_ptr_array_sort_with_data (file_list,
sort_filelist,
GINT_TO_POINTER (sort_mode));
从版本 2.32 开始,这保证了排序的稳定性。
此函数不直接对语言绑定可用。
参数
array
-
类型: 一个
gpointer
数组一个
GPtrArray
。数据由函数调用者拥有。 compare_func
-
类型:
GCompareDataFunc
比较函数。
user_data
-
类型:
gpointer
传递给 compare_func 的数据。
参数可以是 NULL
。数据由函数调用者拥有。