Thread overview
Two-dimensional slices in D
Apr 14, 2015
Dennis Ritchie
Apr 14, 2015
Ivan Kazmenko
Apr 14, 2015
Dennis Ritchie
Apr 14, 2015
Ali Çehreli
April 14, 2015
Hi,
Is it possible to somehow shorter turn to slice on D? Maybe you can use tuples?

F#:
-----
printfn "%A" xs.[4 .. 7, 4 .. 9]
-----

D:
-----
writeln([a[4][4 .. $], a[5][4 .. $], a[6][4 .. $], a[7][4 .. $]]);
-----

F#:
-----
let xs = Array2D.init 10 10 (fun x y -> x * 10 + y)
printfn "[4 .. 7, 6 .. 9] = \n%A" xs.[4 .. 7, 4 .. 9]
-----
http://ideone.com/jjWlXQ

D:
-----
import std.stdio;

void main() {
	
	auto a = [
		[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
		[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
		[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
		[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
		[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
		[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
		[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
		[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
		[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
		[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
	];

	foreach (i; 4 .. 8)
		writeln(a[i][4 .. $]);

    /*	[44, 45, 46, 47, 48, 49]
	[54, 55, 56, 57, 58, 59]
	[64, 65, 66, 67, 68, 69]
	[74, 75, 76, 77, 78, 79]  */

	writefln("[%([%(%s, %)]%|\n %)]", [a[4][4 .. $], a[5][4 .. $], a[6][4 .. $], a[7][4 .. $]]);

    /* [[44, 45, 46, 47, 48, 49]
	[54, 55, 56, 57, 58, 59]
	[64, 65, 66, 67, 68, 69]
	[74, 75, 76, 77, 78, 79]] */
}
-----
http://ideone.com/ACOcHJ
April 14, 2015
On Tuesday, 14 April 2015 at 14:21:41 UTC, Dennis Ritchie wrote:
> 	writefln("[%([%(%s, %)]%|\n %)]", [a[4][4 .. $], a[5][4 .. $], a[6][4 .. $], a[7][4 .. $]]);
At least this can be done as
-----
writefln("[%([%(%s, %)]%|\n %)]", a[4..8].map !(b => b[4 .. $]));
-----
April 14, 2015
On 04/14/2015 07:21 AM, Dennis Ritchie wrote:

> F#:
> -----
> printfn "%A" xs.[4 .. 7, 4 .. 9]
> -----

D supports that syntax as well:

  http://dlang.org/operatoroverloading.html#slice

I have a simple example here:


http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.multi-dimensional%20operator%20overloading

Ali

April 14, 2015
On Tuesday, 14 April 2015 at 15:16:10 UTC, Ivan Kazmenko wrote:
> On Tuesday, 14 April 2015 at 14:21:41 UTC, Dennis Ritchie wrote:
>> 	writefln("[%([%(%s, %)]%|\n %)]", [a[4][4 .. $], a[5][4 .. $], a[6][4 .. $], a[7][4 .. $]]);
> At least this can be done as
> -----
> writefln("[%([%(%s, %)]%|\n %)]", a[4..8].map !(b => b[4 .. $]));
> -----

Thanks.

On Tuesday, 14 April 2015 at 17:27:15 UTC, Ali Çehreli wrote:
> On 04/14/2015 07:21 AM, Dennis Ritchie wrote:
>
>> F#:
>> -----
>> printfn "%A" xs.[4 .. 7, 4 .. 9]
>> -----
>
> D supports that syntax as well:
>
>   http://dlang.org/operatoroverloading.html#slice
>
> I have a simple example here:
>
>
> http://ddili.org/ders/d.en/templates_more.html#ix_templates_more.multi-dimensional%20operator%20overloading
>
> Ali

Yes, now I understand. Thanks.