我构建了一个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
参数来传递频率计数和所需的频率值?
答案 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;
}