2017-01-03 1 views
0

저는 Qt를 처음 사용하는 사람입니다. 조건부로 QList을 반복하는 방법에 대해서는 의문의 여지가 있습니다.QList 반복 조건을 사용하여

List Preview

내가 Feature="F1"Result="pass" 내가 기능 1 ID의 수를 얻을 필요가리스트의 항목을 얻으려면 :

struct Data 
{ 
    QString Feature; 
    QString Id; 
    QString Result; 
}; 

QList<Data> myList; 

는 그리고이 같은 목록을 가지고있다. 중복 제거.

저는 LINQ 및 C# List에 익숙하며 C#의 한 줄에 코드를 작성할 수 있습니다. 그러나 QList으로 나는 약간 혼란 스럽다.

+0

당신이 기준과 일치 또는 "ID"값의 개수가 필요하십니까 각 ID가 경기에서 얼마나 자주 발생했는지 계산? 즉, 출력은'1' (Id1만이 기준과 일치 함)이거나'[Id1 -> 3]'과 같은지도가 필요합니까 (Id1은 기준에 3 번 일치합니다). –

답변

1

우선 QList을 사용하면 안되며 QVector 인 경우가 많으므로 대부분 efficient입니다. QList이 필요한 경우가 아니라면 Qt API와의 인터페이스가 필요하기 때문입니다. 그럼에도 불구하고 QVector::toList이 아마도 더 나을 것입니다.

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 필요 자체가되지 않습니다

이 문제에 관해서는, 그것은뿐만 아니라 C++에서 한 줄이 될 수 있습니다.

는 여전히 한 줄이 될 수있는 조건을 만족하는 모든 고유 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(); 
+0

질문에 Qt를 사용하기 시작했습니다. QList 사용법을 배우려면 답변을 요청하십시오. – eyllanesc

+0

@eyllanesc 코드는'QList'와 동일 할 것이므로 당신의 downvote 나 코멘트를 이해하지 못합니다. 게다가 OP는'QList'를 사용하는 것을 배우고 있다고 말하지는 않았지만, 아마도'List'가 기본 컨테이너 인 C#에서 왔기 때문에 그가 이것을 사용하고있을 것입니다. Qt에서 기본값으로 간주되어서는 안된다고 지적했을뿐입니다. – Resurrection

+0

그는 "그러나 QList에서는 혼란 스럽습니다"와 "QT에 익숙하지 않은 사람이 있습니다" – eyllanesc