我有一个对象列表,其中包含一个名为“名称”的属性。我想使用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