开发者社区> 问答> 正文

如何删除结构C数组中的重复值

我有一个结构数组,它们按ID排序,并且在数组中有该ID的重复条目。数组中的每个结构都有许多与之关联的点,我想找到每个ID的总点数。我想删除所有重复项并将它们的总点值存储在单个结构中,以减小数组的大小。

typedef struct boat_data {
    int ID;
    int time_to_complete_race; //This can be ignored
    int points;
} boat_node;
typedef boat_node boat_ptr;

我编写的当前代码似乎无法按预期工作。tot_boats是船tot_members的数量,是已找到的成员的数量(我的意思是,当前存在非重复ID的数量)。我有两个数组结构,其中的final_boat_scores大小为存在的成员数的大小,我想存储该ID值和该points值

for(int boat = 0; boat < (total_boats - tot_members); boat++) {
        for (int next_boat = 0; next_boat < (total_boats - tot_members); next_boat++) {
            if (boat_scores[boat].ID == boat_scores[next_boat].ID) {
                final_boat_scores[boat].ID = boat_scores[next_boat].ID;
                final_boat_scores[boat].points += boat_scores[next_boat].points;
                break;
            }
        }
    }

展开
收起
kun坤 2019-11-29 11:18:19 450 0
1 条回答
写回答
取消 提交回答
  • 请让我知道您是否可以更改数组输入。如果是,您是否每次需要将新元素存储到数组时都只检查ID?如果ID与已存储的元素匹配,只需让recordedPoint + =点(即,将要存储的点直接添加到数组中记录的总点中)即可。这样,您将不会创建重复的条目。

    编辑:由于您无法更改输入数组,因此可以遍历boat_score数组和final_boat_score数组,并检查当前船的ID是否已记录到final_boat_score数组中。如果是,则只需将其添加到总分中即可。我认为您的代码存在的问题是您没有遍历数组中的所有元素,因为数组大小绝对不是total_boats - tot_members。您也不需要该final_boat_scores[boat].ID = boat_scores[next_boat].ID;行,因为它是多余的,您的if语句仅在确实如此的情况下才执行。您的break;语句也会过早地结束循环,在这种情况下,您不能及早退出循环,因为您实际上并不知道您有多少个具有相同ID的条目,对吗?

    //remember to initialize final_boat_score first with all IDs you have
    for (int i = 0; i < final_boat_score_size; i++) {
        //initialize the total point = 0 first
        final_boat_score[i].points = 0;
        //then loop through your input data
        for (int j = 0; j < boat_score_size; i++) {
            //if there exist an input element boat_score[j] with the same ID
            //as the current final_boat_score[i] element, add its points to the total
            if (final_boat_score[i].ID == boat_score[j].ID) {
                final_boat_score[i].points += boat_score[j].points;
            }
        }
    }
    

    但是,这不会删除原始数组,因此,如果您不再需要它,则需要自己删除它。希望对您有所帮助!

    #https://stackoverflow.com/questions/59091226/how-do-i-remove-duplicate-values-in-an-array-of-structs-c

    2019-11-29 11:18:50
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
用计算和数据去改变整个世界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载