www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - array help.

reply "NA" <NA nospam.com> writes:
Hi,

I have the following array.

[
	[
		[],
		[],
		[[0, 1] [0, 2]],
		[[0, 0] [0, 3]]
	]

	[
		[],
		[],
		[[1, 1] [1, 2]],
		[[1, 0] [1, 3]]
	]
]

and would like it to be arranged like

[
	[
		[[0, 1] [0, 2]],
		[[0, 0] [0, 3]],
		[],
		[]
	]

	[
		[[1, 1] [1, 2]],
		[[1, 0] [1, 3]],
		[],
		[]
	]
]

Any ideas welcome.

NA
Jul 08 2014
next sibling parent reply "Tobias Pankrath" <tobias pankrath.net> writes:
 Any ideas welcome.

 NA
Use std.algorithm.sort with a custom comparison function.
Jul 08 2014
parent reply "bearophile" <bearophileHUGS lycos.com> writes:
Tobias Pankrath:

 Use std.algorithm.sort with a custom comparison function.
It's a very nice example of learning algorithms and data fitting. I have shown an answer very fitted (perhaps over-fitted) on the given example. With just the given data there is no way to know how much general the problem is :-) Bye, bearophile
Jul 08 2014
parent "Tobias Pankrath" <tobias pankrath.net> writes:
On Tuesday, 8 July 2014 at 18:26:20 UTC, bearophile wrote:
 Tobias Pankrath:

 Use std.algorithm.sort with a custom comparison function.
It's a very nice example of learning algorithms and data fitting. I have shown an answer very fitted (perhaps over-fitted) on the given example.
I had your solution in mind, too, as a hint that the problem might be underspecified.
 With just the given data there is no way to know how much 
 general the problem is :-)
Yeah, but I hope at least he knows it.
Jul 08 2014
prev sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
NA:

 Any ideas welcome.
Is this good enough? void main() { import std.algorithm: swap; int[][][][] a = [[[], [], [[0, 1], [0, 2]], [[0, 0], [0, 3]] ], [[], [], [[1, 1], [1, 2]], [[1, 0], [1, 3]] ] ]; int[][][][] b = [[[[0, 1], [0, 2]], [[0, 0], [0, 3]], [], [], ], [[[1, 1], [1, 2]], [[1, 0], [1, 3]], [], [] ] ]; foreach (s1; a) { swap(s1[0], s1[2]); swap(s1[1], s1[3]); } assert(a == b); } Bye, bearophile
Jul 08 2014
parent reply "NA" <NA nospam.com> writes:
On Tuesday, 8 July 2014 at 18:16:55 UTC, bearophile wrote:
 NA:

 Any ideas welcome.
Is this good enough? void main() { import std.algorithm: swap; int[][][][] a = [[[], [], [[0, 1], [0, 2]], [[0, 0], [0, 3]] ], [[], [], [[1, 1], [1, 2]], [[1, 0], [1, 3]] ] ]; int[][][][] b = [[[[0, 1], [0, 2]], [[0, 0], [0, 3]], [], [], ], [[[1, 1], [1, 2]], [[1, 0], [1, 3]], [], [] ] ]; foreach (s1; a) { swap(s1[0], s1[2]); swap(s1[1], s1[3]); } assert(a == b); } Bye, bearophile
Thanks but int[][][][] a = [[[], [], [], [], [[0, 1], [0, 2]], [[0, 0], [0, 3]] ], [[], [], [], [], [[1, 1], [1, 2]], [[1, 0], [1, 3]] ] ]; will not work and no I can't sort it. Cheers.
Jul 08 2014
next sibling parent reply "bearophile" <bearophileHUGS lycos.com> writes:
NA:

 will not work and no I can't sort it.
Why no sort? void main() { import std.algorithm: sort, SwapStrategy; import std.array: empty; int[][][][] a = [[[], [], [], [], [[0, 1], [0, 2]], [[0, 0], [0, 3]] ], [[], [], [], [], [[1, 1], [1, 2]], [[1, 0], [1, 3]] ] ]; int[][][][] b = [[[[0, 1], [0, 2]], [[0, 0], [0, 3]], [], [], [], [] ], [[[1, 1], [1, 2]], [[1, 0], [1, 3]], [], [], [], [] ] ]; foreach (s1; a) s1.sort!(q{ a.empty < b.empty }, SwapStrategy.stable); assert(a == b); } Bye, bearophile
Jul 08 2014
parent "NA" <NA nospam.com> writes:
On Tuesday, 8 July 2014 at 18:40:37 UTC, bearophile wrote:
 NA:

 will not work and no I can't sort it.
Why no sort?
Thanks, It works as expected. As for the sort - wasn't thinking straight. Cheers, NA
Jul 08 2014
prev sibling parent "Tobias Pankrath" <tobias pankrath.net> writes:
 will not work and no I can't sort it.

 Cheers.
What are you trying to do? To reorder the elements of a sequence in a specified manner is called sorting, where I live.
Jul 08 2014