只包含C++头文件Ranges和LINQ模板库:boolinq
jopen
11年前
这是一个只包含C++ 头文件Ranges和LINQ模板库。支持STL/Qt集合。
Example with integers
int src[] = {1,2,3,4,5,6,7,8}; auto dst = from(src).where( [](int a){return a%2 == 1;}) // 1,3,5,7 .select([](int a){return a*2;}) // 2,6,10,14 .where( [](int a){return a>2 && a<12;}) // 6,10 .toVector(); // dst type: std::vector<int> // dst items: 6,10
Example with structs
struct Man { std::string name; int age; }; Man src[] = { {"Kevin",14}, {"Anton",18}, {"Agata",17}, {"Terra",20}, {"Layer",15}, }; auto dst = from(src).where( [](const Man & man){return man.age < 18;}) .orderBy([](const Man & man){return man.age;}) .select( [](const Man & man){return man.name;}) .toVector(); // dst type: std::vector<std::string> // dst items: "Kevin", "Layer", "Agata"
Interesting example
struct Message { std::string PhoneA; std::string PhoneB; std::string Text; }; Message messages[] = { {"Anton","Troll","Hello, friend!"}, {"Denis","Wride","OLOLO"}, {"Anton","Papay","WTF?"}, {"Denis","Maloy","How r u?"}, {"Denis","Wride","Param-pareram!"}, }; int DenisUniqueContactCount = from(messages).where( [](const Message & msg){return msg.PhoneA == "Denis";}) .distinct([](const Message & msg){return msg.PhoneB;}) .count(); // DenisUniqueContactCount == 2
容器的支持
- C++: Native arrays, pairs of pointers
- STL: list, stack, queue, vector, deque, set, map, any compatible ....
- Qt: QList, QVector, QSet, QMap.