Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Alexander Zhirov via Digitalmars-d-learn

On Sunday, 16 July 2023 at 11:16:55 UTC, Danilo wrote:

Would a static constructor be okay? This way the static data
is not initialized at every `new` and object creation is faster.


Alternatively, i can think about your proposal. At the moment, I 
have solved my problem using the following method:


```d
@property string[][string] arr() {
return [
"one": ["abc", "def"],
"two": ["ghi", "jkl"],
"three": ["mno", "pqr"]
];
}
```

I don't know how true it will be considered. After all, the 
function creates an array every time it is called, which is not 
correct.


Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Danilo via Digitalmars-d-learn
But is there really no other way to immediately point a static 
array to a variable?


Looks like this is not implemented yet:

- https://dlang.org/spec/hash-map.html#static_initialization

Would a static constructor be okay? This way the static data
is not initialized at every `new` and object creation is faster.

- https://dlang.org/spec/class.html#static-constructor

```d
import std.stdio;

class C {
static string[][string] arr;

static this() { // static constructor
arr = [
"one": ["abc", "def"],
"two": ["ghi", "jkl"],
"three": ["mno", "pqr"]
];
}

this() { // object constructor
}

void show(string value) {
writeln(
value,
": ",
arr[value],
": ",
arr[value][0],
", ",
arr[value][1]
);
}
}

void main() {
auto var = new C;
var.show("one");
var.show("two");
var.show("three");
}
```



Re: Initializing an associative array into a variable when it is created

2023-07-16 Thread Alexander Zhirov via Digitalmars-d-learn

On Saturday, 15 July 2023 at 23:34:22 UTC, Danilo wrote:

Works fine, if you add a semicolon at the end.


I'm sorry. I didn't put the question quite correctly. Yes, this 
is how the array is initialized. I'm trying to describe it all in 
a class. I.e. I need to create a variable in the class that will 
be initialized when creating an object. I understand that it 
needs to be described in the constructor. But is there really no 
other way to immediately point a static array to a variable?





Re: Initializing an associative array into a variable when it is created

2023-07-15 Thread Danilo via Digitalmars-d-learn

On Saturday, 15 July 2023 at 23:24:27 UTC, Alexander Zhirov wrote:
There are the same number of elements everywhere (in the 
internal array).


Sorry, forgot that part.

Just add the size of the internal array (2 in this case):
```d
string[2][string] arr = [
"one": ["abc", "def"],
"two": ["ghi", "jkl"],
"three": ["mno", "pqr"]
];
```



Re: Initializing an associative array into a variable when it is created

2023-07-15 Thread Danilo via Digitalmars-d-learn

Works fine, if you add a semicolon at the end.
```d
import std.stdio;

void main() {
string[][string] arr = [
"one": ["abc", "def"],
"two": ["ghi", "jkl"],
"three": ["mno", "pqr"]
];
writeln(arr);
writeln(arr["two"]);
writeln(arr["two"][0]);
}
```