我和同事讨论过简单字符串解析器的实现.一个是"小",10行代码,使用c ++和流,另一个是70行代码,使用switch case并通过char迭代字符串char.我们测试了超过100万次迭代,并使用时间命令测量速度.似乎漫长而丑陋的方法平均快1秒.
问题:输入:字符串
"v=spf1 mx include:_spf-a.microsoft.com include:_spf-b.microsoft.com include:_spf-c.microsoft.com include:_spf-ssg-a.microsoft.com ip4:131.107.115.212 ip4:131.107.115.215 ip4:131.107.115.214 ip4:205.248.106.64 ip4:205.248.106.30 ip4:205.248.106.32 ~all a:1.2.3.4"
输出:
map<string, list<string>>包含每个键的所有值,例如:ip4,include,a
上面给出的输入字符串上的一次迭代的示例输出:
关键:一
1.2.3.4,
关键:包括
_spf-a.microsoft.com,_spf-b.microsoft.com,_spf-c.microsoft.com,_spf-ssg-a.microsoft.com,
关键:IP4
131.107.115.212,131.107.115.215,131.107.115.214,205.248.106.64,205.248.106.30,205.248.106.32,
"小而美"的解析器:
istringstream iss(input);
map<string, list<string> > data;
string item;
string key;
string value;
size_t pos;
while (iss.good()) {
iss >> item;
pos = item.find(":");
key = item.substr(0,pos);
data[key].push_back(item.substr(pos+1));
}
Run Code Online (Sandbox Code Playgroud)
第二种更快的方法:
typedef enum {I,Include,IP,A,Other} State;
State state = Other;
string line = input;
string value;
map<string, list<string> > data;
bool end = …Run Code Online (Sandbox Code Playgroud) 我用以下方法创建了一个flutter插件:
flutter create --template plugin flutter_plugin
Run Code Online (Sandbox Code Playgroud)
我已经将aar文件放入flutter_plugin / android / src / main / libs文件夹中,
我已经修改了flutter_plugin / android / build.gradle
并将rootProject.allprojects部分更改为
rootProject.allprojects {
repositories {
google()
jcenter()
flatDir {
dirs "src/main/libs"
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在android {}之后添加了依赖项部分:
dependencies {
implementation (name:"mylib",ext:"aar")
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行时:flutter run
我收到gradle异常,显然它试图在示例目录:example / src / main / libs / mylib.aar中寻找我的mylib.aar并失败。
我可以将lib放在示例dir中,但我认为这不是正确的方法,因为我希望我的aar成为插件的一部分。