按给定的现有名称列表对对象列表进行排序

时间:2018-12-17 02:21:03

标签: c++ qt

我有一个对象列表,其中包含一个名为“名称”的属性。我想使用QStringList对QStringList中存在的对象列表进行排序。否则,请保留其余项目。因为StringList可能不包含对象列表中每个项目的字符串。

我最好将这个对象列表传递给一个函数,并让它返回一个新的对象列表吗?下面是我写的。似乎这不是我提出问题的最佳方法。

// list of objects
QList<MyObject> objects;
objects << MyObject("Max")
    << MyObject("Nuke")
    << MyObject("Affinity")
    << MyObject("Photoshop")
    << MyObject("Maya")
    << MyObject("Houdini")
    << MyObject("Google");


// ordered string list
QStringList names = { "Max", "Affinity", "Google" };

QList<MyObject> ListView::sortItems(const QList<MyObject>& objects, const QStringList names)
{
    // New List
    QList<MyObject> newList; // objects that exist in list of "names"
    QList<MyObject> otherList; // objects not listed in "names"

    for (int i=0; i < objects.size(); i++) {
        // Get Objects name
        MyObject obj = objects[i];

        if (names.contains(obj.name())) {
            int index = names.indexOf(obj.name())
            newList.insert(index, obj);
        }else{
            otherList.append(obj);
        }

        // now append the remaining items
        foreach(MyObject obj, otherList) {
            newList.append(obj);
        }
    }
    return newList;
}

// desired output order 
// Max, Affinity, Google, Nuke, Photoshop, Maya, Houdini

0 个答案:

没有答案
相关问题