how to assign multiple variables at once by unpacking array?

mw mw at g.c
Sat Oct 7 16:12:47 UTC 2023


Interesting: in terms of easy of coding, clarity and future 
maintenance, which one is superior?

The one liner in Python, or your "solution" with dozen lines of 
code? BTW, is that a solution at all? Did it achieved what the 
original goal asked in the OP question?

So, who should learn from whom?


On Saturday, 7 October 2023 at 12:01:07 UTC, Salih Dincer wrote:
> On Saturday, 7 October 2023 at 07:31:45 UTC, mw wrote:
>> https://stackoverflow.com/questions/47046850/is-there-any-way-to-assign-multiple-variable-at-once-with-dlang
>>
>> How to do this Python code in D:
>>
>> ```
>>>>> s = "1 2 3"
>>>>> A,B,C = map(int, s.split(" "))
>>>>> A,B,C
>> (1, 2, 3)
>>
>> ```
>>
>> Is there a better way (since 2017)?
>
> My words to those who come from Python:
>
> If you are making money from Python, please stay there, but if 
> you want to learn new things and a modern language, "Welcome to 
> D"
>
> and please use Tuples :)
>
> ```d
> import std.typecons, std.stdio;
>
> struct DICT(C, F, S)
> {
>   S[C] dict;
>   C[F] freq;
>
>   void opAssign(Tuple!(C, F, S) chr) {
>     dict[chr[0]] = chr[2];
>     freq[chr[1]] = chr[0];
>   }
>
>   string toString() const
>   {
>     import std.array : appender;
>     import std.algorithm : sort;
>     import std.format : formattedWrite;
>
>     auto r = appender!string;
>     foreach(f; freq.keys.sort!"a>b") {
>       auto key = freq[f];
>       r.formattedWrite("(%c) %s, %.1f\n",
>                     key, dict[key], f);
>     }
>     return r.data;
>   }
> }
>
> void main()
> {
>   alias index = char;
>   alias rank = float;
>   alias name = string;
>
>   alias Dict = DICT!(index, rank, name);
>   alias chr = Tuple!(index, rank, name);
>
>   auto chrs = [ chr(44, 61.3, "Comma"),
>                 chr(34, 26.7, "Doublequote"),
>                 chr(39, 24.3, "Apostrophe"),
>                 chr(45, 15.3, "Hyphen"),
>                 chr(63,  5.6, "Question"),
>                 chr(58,  3.4, "Colon"),
>                 chr(33,  3.3, "Exclamation"),
>                 chr(59,  3.2, "Semicolon")
>   ];
>
>   Dict enDict;
>   foreach(tup; chrs) //multiple insertion
>     enDict = tup;
>
>   writeln("Frequency distributions of punctuation marks used in 
> English: ");
>   enDict = chr(46, 65.3, "Dot"); // single insertion
>   enDict.writeln;
> }
> ```
>
> SDB at 79




More information about the Digitalmars-d-learn mailing list