Notifications
Clear all

[Closed] Deep Array Equality

Just in case someone wants to compare arrays or multi-arrays:

		
	fn Equals x y = -- all items in sub-array elements are equal (Arrays of the same type and dimension)
		(
			isEqual = true
			if classof x[1] == Array then
			(
				for i = 1 to x.count while isEqual do isEqual = Equals x[i] y[i]
			)
			else
			(
				for i = 1 to x.count while isEqual do isEqual = (x[i] == y[i])
			)
			isEqual
		)
						
	a = 	#(#(0, 8, 2), #(4, 9, 4), #(5, 6, 4))
	b = 	#(#(7, 4, 6), #(10, 4, 6), #(0, 1, 1))
	c = 	#(#(0, 8, 2), #(4, 9, 4), #(5, 6, 5))
	d = 	#(#(0, 8, 2), #(4, 9, 4), #(5, 6, 4))
		
	Equals a b			--	false
	Equals a a			--	true
	Equals a c			--	false
	Equals a d			--	true
	Equals a[1] c[1]	--	true
	Equals a[3] c[3]	--	false
	aa = #(a, b)
	bb = #(a, c)
	cc = #(d, b)
	Equals aa bb		--	false
	Equals aa aa		--	true
	Equals aa cc		--	true
	Equals cc aa		--	true
	Equals cc bb		--	false
		

4 Replies

now is about any depth nested arrays?

You’ll see soon my third (and hopingly last one) attempt with Lambda Expressions. This time I hope to stand your mapped test!

fn equalArrays a1 a2 result:on = if not result then result else
(
	if iskindof a1 Array and iskindof a2 Array and a1.count == a2.count then
	(
		for k=1 to a1.count while result do result = equalArrays a1[k] a2[k] result:result
		result
	)
	else (a1 == a2)
)



You are a big master!