从GLib GTree中提取所有值

时间:2018-12-02 11:48:34

标签: c glib

我构建了一个GLib GTree,其中包含键/值对,其中键是字符(例如'a'),值是该字符在字符串中出现的频率。例如,如果字符串为“ aaa”,则树中唯一的元素将是:“ a” => 3。

我想要做的是遍历树,并以给定的频率(即键/值对的值匹配的位置)计数字符数。

伪代码类似于:

frequency_count = 0
while (current_element = get_next_element)
  if (current_element->value == desired_frequency)
    frequency_count = frequency_count + 1

是否可以使用GTree来做到这一点?我可以找到的唯一函数是g_tree_foreach(),但这需要我传递一个回调函数,该函数返回TRUE以停止遍历树,并且我不想在遍历每一个树之前都停止遍历元件。我是否应该使用回调函数的gpointer user_data参数来传递频率计数和所需的频率值?

1 个答案:

答案 0 :(得分:1)

  

我应该使用回调函数的gpointer user_data参数来传递频率计数和所需的频率值吗?

是的

示例:

typedef struct
{
  guint desired_frequency;
  guint n_matches;
} MatchData;

static gboolean
n_nodes_matching_frequency_cb (gpointer key,
                               gpointer value,
                               gpointer user_data)
{
  MyTreeElement *element = value;
  MatchData *data = user_data;

  if (element->value == data->desired_frequency)
    data->n_matches++;

  return FALSE;
}

guint
n_nodes_matching_frequency (GTree *tree,
                            guint  desired_frequency)
{
  MatchData data = { desired_frequency, 0 };
  g_tree_foreach (tree, n_nodes_matching_frequency_cb, &data);
  return data.n_matches; 
}