php和golang实现根据指定键对数组进行排序

开篇导语:php是世界上最好的语言!,如果你不这么认为,那么咱们看看下面的代码。

这篇文章主要用php和go实现了根据指定键对数组进行排序

PHP代码展示:
//php代码这么精简就不多说什么了,重头戏在下面用golang实现的部分
<?php
$data = [
    ['name' => 'book', 'price' => 100],
    ['name' => 'pen', 'price' => 50],
    ['name' => 'dress', 'price' => 500],
    ['name' => 'shoes', 'price' => 700],
    ['name' => 'chocolate', 'price' => 200]
];
$volume = array_column($data, 'price');

array_multisort($volume, SORT_NUMERIC, SORT_ASC, $data);

print_r($data);
golang代码展示:
package main

import (
	"fmt"
)

//定义一个商品结构体,用于存放商品名称和价格
type Goods struct {
	name  string //商品名称
	price int //商品价格
}

//定义一个用于排序的结构体
type SortStr struct {
	position int //下标位置
	value    int //需要排序的值
}

//入口函数
func main() {
	var originMap map[string]int
	originMap = make(map[string]int)

	originMap["book"] = 100
	originMap["pen"] = 50
	originMap["dress"] = 500
	originMap["shoes"] = 700
	originMap["chocolate"] = 200

	//初始化商品信息
	var originArr []Goods
	for name, price := range originMap {
		originArr = append(originArr, Goods{name: name, price: price})
	}
	
	//获取所有的价格
	var sortArr []SortStr
	for key, Goods := range originArr {
		sortArr = append(sortArr, SortStr{position: key, value: Goods.price})
	}
	//这里使用快速排序实现对价格的排序
	quickSort(sortArr) 
	
	//获取最终结果
	var resultArr []Goods
	for _, val := range sortArr {
		resultArr = append(resultArr, originArr[val.position])
	}
	
	fmt.Println(resultArr)
}

//快速排序,价格按照正序排列
func quickSort(data []SortStr) {
	if len(data) <= 1 {
		return
	}
	mid := data[0].value
	head, tail := 0, len(data)-1
	for i := 1; i <= tail; {
		if data[i].value > mid {
			//交换值和交换值对应的位置
			data[i].value, data[tail].value = data[tail].value, data[i].value        
			data[i].position, data[tail].position = data[tail].position, data[i].position 
			tail--
		} else {
			data[i].value, data[head].value = data[head].value, data[i].value
			data[i].position, data[head].position = data[head].position, data[i].position
			head++
			i++
		}
	}

	quickSort(data[:head])
	quickSort(data[head+1:])
}

由于本人水平有限, 代码错漏缺点在所难免, 希望各位老铁批评指正。

你可能感兴趣的:(Golang)