blob: de3b15f3bf5d16a57e46502f55c11ad41e491fb4 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001map_indices(E)
2
3FUNKTION:
4 mapping map_indices(mapping m, string fun, object ob [, mixed extra])
5 mapping map_indices(mapping m, closure cl [, mixed extra])
6
7PARAMETER:
8 arr - zu mappendes Array
9 fun/cl - zu rufende Methode/Closure
10 ob - Objekt/Dateiname, an dem Methode gerufen werden soll
11 extra - weitere Parameter fuer Methode/Closure
12
13BESCHREIBUNG:
14 Mapped die Elemente (jeweils Schluessel) aus 'map' durch die Methode
15 'fun' oder die Closure 'cl' in ein neues Mapping.
16 Fuer jedes Element aus 'm' wird 'fun' oder 'cl' mit dem Schluessel als
17 erstem Parameter [und folgend den optionalen Extra-Parametern] gerufen.
18
19 Der Rueckgabewert der Methode/Closure wird in fuer den Schluessel als
20 Datenwert in das neue Mapping eingetragen.
21
22 ACHTUNG: Alle anderen Daten bei Mapping mit Breite>1 verfallen!
23
24 Verwendung von Methoden:
25 Wenn bei der Angabe von 'fun' kein Objekt 'ob' in Form eines Strings
26 oder Objekts angegeben wird, wird this_object() angenommen.
27
28 Verwendung von Closures:
29 Es koennen sowohl Lfun-Closures als auch Lambda-Closures verwendet
30 werden. Lfun-Closures koennen, wenn im selben Objekt vorhanden auch
31 'private' oder/und 'static' deklariert sein, muessen aber zu dem
32 Zeitpunkt der Verwendung bekannt sein (Funktionsprototypen benutzen).
33
34RUeCKGABEWERT:
35 Mapping mit Schluessel:Rueckgabewerten der Methode/Closure.
36
37BEISPIELE:
38 // ersetze in einem Mapping die Datenwerte durch das Doppelte,
39 // nutze dabei die Datenwerte des Altmappings durch Uebergabe als
40 // extra-Parameter
41
42 // Anmerkung: Das geht mit walk_mapping() eleganter!
43
44 int do_double(string key, mapping m, int mult) {
45 return m[key]*mult;
46 }
47
48 mapping x, y;
49 x=(["a":2, "b":3]);
50 y=map_indices((["a":2, "b":3]), #'do_double, &x, 3);
51
52 y == (["a":6,"b":9])
53
54AeQUIVALENZCODE (nicht empfohlen, nur zum Verstaendnis!):
55 int i;
56 mapping ret; mapping input;
57 mixed *index;
58
59 ret=m_allocate(0, 1);
60 index=m_indices(input);
61 i=sizeof(index);
62 while(i--)
63 ret[index[i]]=ob->fun(index[i] [, extra1, extra2, ...]))
64 // ret[index[i]]=funcall(cl, index[i] [, extra1, extra2, ...]);
65
66SIEHE AUCH:
67 Arrays: filter(E), map(E)
68 Objektarrays: filter_objects(E), map_objects(E)
69 Mappings: filter_indices(E)
70
71 Sonstiges: walk_mapping(E), m_contains(E)
72 member()
73 m_indices(E), m_values(E)
74
7529.10.2006 Zesstra