view pkg/common/floats.go @ 5521:3cfbc5769e8b

Make invalid output of ISRSrange_area() less likely Since ST_Transform() might produce an invalid polygon, add an extra ST_MakeValid().
author Tom Gottfried <tom@intevation.de>
date Thu, 21 Oct 2021 20:20:30 +0200
parents 4ca884dfc470
children
line wrap: on
line source

// This is Free Software under GNU Affero General Public License v >= 3.0
// without warranty, see README.md and license for details.
//
// SPDX-License-Identifier: AGPL-3.0-or-later
// License-Filename: LICENSES/AGPL-3.0.txt
//
// Copyright (C) 2019 by via donau
//   – Österreichische Wasserstraßen-Gesellschaft mbH
// Software engineering by Intevation GmbH
//
// Author(s):
//  * Sascha L. Teichmann <sascha.teichmann@intevation.de>

package common

import "sort"

// DedupFloat64s sorts arr and removes duplicates in place.
// Returns a sub slice of arr only containing the unique elements.
func DedupFloat64s(arr []float64) []float64 {
	sort.Float64s(arr)
	for i := 1; i < len(arr); {
		if arr[i-1] == arr[i] {
			copy(arr[i:], arr[i+1:])
			arr = arr[:len(arr)-1]
		} else {
			i++
		}
	}
	return arr
}