函数

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
数据由函数调用者拥有。