首先,您不應該使用QList
,而應該使用QVector
,因爲在大多數情況下它更多是efficient。除非你需要QList
,因爲你與Qt API接口,當然期望它。儘管如此,QVector::toList
可能會更好。
至於你的問題,它可以是一個班輪在C++以及:
QVector<Data> data{{"F1", "Id1", "Pass"}, //or QList<Data> if you really insist...
{"F1", "Id1", "Pass"},
{"F1", "Id1", "Pass"},
{"F1", "Id2", "Fail"},
{"F1", "Id2", "Fail"},
{"F3", "Id3", "Pass"},
{"F3", "Id3", "Pass"},
{"F2", "Id4", "Pass"},
{"F2", "Id4", "Pass"}};
qDebug() << std::count_if(data.cbegin(),
data.cend(),
[](const Data &data) { return data.Feature == "F1" && data.Result == "Pass"; });
打印3.
需要C++ 11的拉姆達但count_if
本身並沒有。
要列出符合條件的所有唯一ID它仍然是一個班輪,但它開始變得凌亂:
QVector<Data> result;
std::copy_if(data.cbegin(),
data.cend(),
std::back_inserter(result),
[&result](const Data &data)
{
return std::find_if(result.cbegin(), result.cend(), [&data](const Data &d) { return d.Id == data.Id; }) == result.cend()
&& data.Feature == "F1"
&& data.Result == "Pass";
});
qDebug() << result.count();
你需要符合標準或的「ID」值數每場比賽在比賽中出現的次數? 也就是說你需要輸出爲'1'(只有Id1符合標準)或像'[Id1 - > 3]'(Id1匹配標準3次)的地圖 –