mirror of
https://github.com/wader/fq.git
synced 2024-12-26 15:02:28 +03:00
3b717c3ba4
Add toxml/fromxml for XML encoding, mighe be lossy on ordering fromxml has {seq:bool} to add #seq attributes to improve ordering toxml has {indent:number} to choose space indent depth Add tojson, same as in jq but also has {indent:number} options Add toyaml/fromyaml for YAML Add totoml/fromtoml for TOML Add tojq/fromjq for jq-flavored JSON (optional quotes for keys, comments and trailing commas support) Add tocsv/fromcsv for CSV formcvs takes {comma:string, comment:string} for custom separtor and comment character Rename/split hex into tohex/fromhex Rename/split base64 into tobase64/frombase64 tobase64/frombase64 takes {encoding:string} option for base64 flavour (std, url, rawstd, rawurl) Add to/from<format> urlpath, urlquery, url, xmlentities, base64, hex Add to<hash> md4, md5, sha1, sha256, sha512, sha3_224, sha3_256, sha3_384, sha3_512 Add to/from<encoding> iso8859-1, utf8, utf16, utf16le, utf16be
27 lines
849 B
Go
27 lines
849 B
Go
// proxysort sorts one slice and but swaps index in two
|
|
// assumes both slices have same length.
|
|
package proxysort
|
|
|
|
import "sort"
|
|
|
|
type proxySort[Tae any, Ta []Tae, Tbe any, Tb []Tbe] struct {
|
|
a Ta
|
|
b Tb
|
|
fn func(Ta []Tae, i, j int) bool
|
|
}
|
|
|
|
func (p proxySort[Tae, Ta, Tbe, Tb]) Len() int { return len(p.a) }
|
|
func (p proxySort[Tae, Ta, Tbe, Tb]) Less(i, j int) bool { return p.fn(p.a, i, j) }
|
|
func (p proxySort[Tae, Ta, Tbe, Tb]) Swap(i, j int) {
|
|
p.a[i], p.a[j] = p.a[j], p.a[i]
|
|
p.b[i], p.b[j] = p.b[j], p.b[i]
|
|
}
|
|
|
|
func Sort[Tae any, Ta []Tae, Tbe any, Tb []Tbe](a Ta, b Tb, fn func(Ta []Tae, i, j int) bool) {
|
|
sort.Sort(proxySort[Tae, Ta, Tbe, Tb]{a: a, b: b, fn: fn})
|
|
}
|
|
|
|
func Stable[Tae any, Ta []Tae, Tbe any, Tb []Tbe](a Ta, b Tb, fn func(Ta []Tae, i, j int) bool) {
|
|
sort.Stable(proxySort[Tae, Ta, Tbe, Tb]{a: a, b: b, fn: fn})
|
|
}
|