原文
找关联数组并迭代
我正在固定
的串列表
中搞DFS
之类.如生成
串排列,但是搜索
条件很复杂,要尽量"提前退出
".即,只要看到第一个或第二个
单词,就可修剪
树枝.
import std;
void main() {
auto m = iota(20).map!(i => tuple(i, format!"value_%s"(i))).assocArray;
foreach (key; m.keys.sort.find(13)) {
writeln(m[key]);
}
}
有点类似C++
的向量双
了.
这样:
import std;
void main() {
int[string] map;
foreach (v ; 1 .. 9)
map[v.to!string] = v;
writeln(map); // 打印["8":8,"4":4,"7":7,"6":6,"1":1,"5":5,"2":2,"3":3]
auto something = "6";
auto pointer_to_something = (something in map);
if (pointer_to_something) {
writeln(*pointer_to_something); // prints 6
foreach (k, ref v ; map) {
if (&v == pointer_to_something)
break;
writeln(v); // prints 8 4 7
}
}
}
这样?
import std;
void main(){
int[int] a = [2 : 4, 5 : 6, 6 : 7, 10 : 12, 11 : 23 ];
bool cont = true;
foreach(k, v; a){ // 用引用
if (v != 7 && cont){
continue;
}
else{
cont = false;
writeln(k, ":", v);
}
}
/+
foreach(k, v; a.skipOver!((a, b) => a != b)(6)){ // 输入区间,可工作.
writeln(k, ":", v);
}
+/
}
可用,按键值
:
import std.algorithm, std.range, std.stdio;
void main()
{
auto aa = ["x": 123, "y": 456, "z": 789, "w": 10];
// 区间类型名是私有的,所以用`typeof(it)`
auto it = aa.byKeyValue;
typeof(it) saved;
// 保存位置
for (; !it.empty; it.popFront)
{
auto e = it.front;
if (e.key == "y")
saved = it.save;
writefln("%s: %s", e.key, e.value);
}
writeln("--------");
// 从保存位置迭代
foreach (e; saved)
writefln("%s: %s", e.key, e.value);
}
这里:
module main;
import std.stdio;
void main() {
int[string] m;
m["key1"] = 7;
m["key2"] = 8;
auto iter = m.byKeyValue();
// 步进
iter.popFront();
// 保留位置
auto iter2 = iter.save();
// 消耗第1迭代器
foreach (kv; iter) {
writeln("iter: ", kv.key, " = ", kv.value);
}
// 第2个看见啥
foreach (kv; iter2) {
writeln("iter2: ", kv.key, " = ", kv.value);
}
}