原文
找關聯數組并疊代
我正在
固定
的
串清單
中搞
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);
}
}