{"id":117659,"date":"2019-05-22T12:04:11","date_gmt":"2019-05-22T04:04:11","guid":{"rendered":"http:\/\/www.fagao.me\/?p=117659"},"modified":"2019-05-22T12:04:11","modified_gmt":"2019-05-22T04:04:11","slug":"go%e8%af%ad%e8%a8%80%e7%9a%84%e6%8e%92%e5%ba%8f%e5%92%8c%e6%90%9c%e7%b4%a2","status":"publish","type":"post","link":"https:\/\/www.fagao.me\/p\/117659.htm","title":{"rendered":"go\u8bed\u8a00\u7684\u6392\u5e8f\u548c\u641c\u7d22"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/www.fagao.me\/images\/uploads\/2019_003.jpg\" alt=\"\"><\/p>\n<p>\u665a\u4e0a\u51c6\u5907\u52a8\u624b\u5199\u70b9 go \u7684\u7a0b\u5e8f\u7684\u65f6\u5019\uff0c\u60f3\u8d77 go \u5982\u4f55\u6392\u5e8f\u7684\u95ee\u9898\u3002\u6392\u5e8f sort \u662f\u4e2a\u57fa\u672c\u7684\u64cd\u4f5c\uff0c\u5f53\u7136\u641c\u7d22 search \u4e5f\u662f\u3002c \u63d0\u4f9b\u4e00\u4e2a qsort \u548c bsearch\uff0c\u4e00\u4e2a\u5feb\u6392\u4e00\u4e2a\u4e8c\u5206\u67e5\u627e\uff0c\u4e0d\u8fc7\u662f\u4f7f\u7528\u8d77\u6765\u90fd\u4e0d\u65b9\u4fbf\uff1b c++ \u4e2d\u7684 sort \u8c8c\u4f3c\u5f88\u4e0d\u9519\uff0c\u56e0\u4e3a c++ \u652f\u6301\u6cdb\u578b(\u6216\u662f\u8bf4\u6a21\u677f)\uff0c\u6240\u4ee5\u5f88\u591a\u4e1c\u897f\u4f7f\u7528\u8d77\u6765\u5f88\u65b9\u4fbf\u3002go \u662f\u901a\u8fc7 sort \u5305\u63d0\u4f9b\u6392\u5e8f\u548c\u641c\u7d22\uff0c\u56e0\u4e3a go \u6682\u65f6\u4e0d\u652f\u6301\u6cdb\u578b\uff08\u5c06\u6765\u4e5f\u4e0d\u597d\u8bf4\u652f\u4e0d\u652f\u6301\uff09\uff0c\u6240\u4ee5\uff0cgo \u7684 sort \u548c search \u4f7f\u7528\u8d77\u6765\u8ddf\u7c7b\u578b\u662f\u6709\u5173\u7684\uff0c\u6216\u662f\u9700\u8981\u50cf c \u4e00\u6837\u5199\u6bd4\u8f83\u51fd\u6570\u7b49\uff0c\u7a0d\u5fae\u663e\u5f97\u4e5f\u4e0d\u662f\u5f88\u65b9\u4fbf\u3002<\/p>\n<p>\u8865\u6ce8\uff1a \u8fd1\u6765\u53c8\u770b go \u7684\u6392\u5e8f\uff0c \u53d1\u73b0\u4ee5\u524d\u5bf9 go \u7684\u6392\u5e8f\u7406\u89e3\u7684\u6709\u70b9\u6d45\u4e86\u3002 go \u7684\u6392\u5e8f\u601d\u8def\u548c c \u548c c++ \u6709\u4e9b\u5dee\u522b\u3002 c \u9ed8\u8ba4\u662f\u5bf9\u6570\u7ec4\u8fdb\u884c\u6392\u5e8f\uff0c c++ \u662f\u5bf9\u4e00\u4e2a\u5e8f\u5217\u8fdb\u884c\u6392\u5e8f\uff0c go \u5219\u66f4\u5bbd\u6cdb\u4e00\u4e9b\uff0c\u5f85\u6392\u5e8f\u7684\u53ef\u4ee5\u662f\u4efb\u4f55\u5bf9\u8c61\uff0c \u867d\u7136\u5f88\u591a\u60c5\u51b5\u4e0b\u662f\u4e00\u4e2a slice (\u5206\u7247\uff0c \u7c7b\u4f3c\u4e8e\u6570\u7ec4)\uff0c\u6216\u662f\u5305\u542b slice \u7684\u4e00\u4e2a\u5bf9\u8c61\u3002<\/p>\n<p>\u6392\u5e8f(\u63a5\u53e3)\u7684\u4e09\u4e2a\u8981\u7d20\uff1a<\/p>\n<ol>\n<li>\n<p>\u5f85\u6392\u5e8f\u5143\u7d20\u4e2a\u6570 n \uff1b<\/p>\n<\/li>\n<li>\n<p>\u7b2c i \u548c\u7b2c j \u4e2a\u5143\u7d20\u7684\u6bd4\u8f83\u51fd\u6570 cmp \uff1b<\/p>\n<\/li>\n<li>\n<p>\u7b2c i \u548c \u7b2c j \u4e2a\u5143\u7d20\u7684\u4ea4\u6362 swap \uff1b<\/p>\n<\/li>\n<\/ol>\n<p>\u4e4d\u4e00\u770b\u6761\u4ef6 3 \u662f\u591a\u4f59\u7684\uff0c c \u548c c++ \u90fd\u4e0d\u63d0\u4f9b swap \u3002 c \u7684 qsort \u7684\u7528\u6cd5\uff1a qsort(data, n, sizeof(int), cmp_int); data \u662f\u8d77\u59cb\u5730\u5740\uff0c n \u662f\u5143\u7d20\u4e2a\u6570\uff0c sizeof(int) \u662f\u6bcf\u4e2a\u5143\u7d20\u7684\u5927\u5c0f\uff0c cmp_int \u662f\u4e00\u4e2a\u6bd4\u8f83\u4e24\u4e2a int \u7684\u51fd\u6570\u3002c++ \u7684 sort \u7684\u7528\u6cd5\uff1a sort(data, data+n, cmp_int); data \u662f\u7b2c\u4e00\u4e2a\u5143\u7d20\u7684\u4f4d\u7f6e\uff0c data+n \u662f\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u7684\u4e0b\u4e00\u4e2a\u4f4d\u7f6e\uff0c cmp_int \u662f\u6bd4\u8f83\u51fd\u6570\u3002<\/p>\n<p>\u4e0b\u9762\u8fd8\u662f\u8fdb\u5165\u6b63\u9898\u3002<\/p>\n<p>\u57fa\u672c\u7c7b\u578b int \u3001 float64 \u548c string \u7684\u6392\u5e8f \u5347\u5e8f\u6392\u5e8f<\/p>\n<p>\u5bf9\u4e8e int \u3001 float64 \u548c string \u6570\u7ec4\u6216\u662f\u5206\u7247\u7684\u6392\u5e8f\uff0c go \u5206\u522b\u63d0\u4f9b\u4e86 sort.Ints() \u3001 sort.Float64s() \u548c sort.Strings() \u51fd\u6570\uff0c \u9ed8\u8ba4\u90fd\u662f\u4ece\u5c0f\u5230\u5927\u6392\u5e8f\u3002(\u6ca1\u6709 sort.Float32s() \u51fd\u6570\uff0c me \u9887\u6709\u70b9\u5947\u602a\u3002)<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>intList <span>:=<\/span><span>[]<\/span><span>int<\/span><span>{<\/span><span>2<\/span><span>,<\/span><span>4<\/span><span>,<\/span><span>3<\/span><span>,<\/span><span>5<\/span><span>,<\/span><span>7<\/span><span>,<\/span><span>6<\/span><span>,<\/span><span>9<\/span><span>,<\/span><span>8<\/span><span>,<\/span><span>1<\/span><span>,<\/span><span>0<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p>float8List <span>:=<\/span><span>[]<\/span><span>float64<\/span><span>{<\/span><span>4<\/span><span>.<\/span><span>2<\/span><span>,<\/span><span>5<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>12<\/span><span>.<\/span><span>3<\/span><span>,<\/span><span>10<\/span><span>.<\/span><span>0<\/span><span>,<\/span><span>50<\/span><span>.<\/span><span>4<\/span><span>,<\/span><span>99<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>31<\/span><span>.<\/span><span>4<\/span><span>,<\/span><span>27<\/span><span>.<\/span><span>81828<\/span><span>,<\/span><span>3<\/span><span>.<\/span><span>14<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>\/\/ float4List := [] float32 {4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} \/\/ no function : sort.Float32s<\/span><\/p>\n<\/li>\n<li>\n<p>stringList <span>:=<\/span><span>[]<\/span><span>string<\/span><span>{<\/span><span>&#8220;a&#8221;<\/span><span>,<\/span><span>&#8220;c&#8221;<\/span><span>,<\/span><span>&#8220;b&#8221;<\/span><span>,<\/span><span>&#8220;d&#8221;<\/span><span>,<\/span><span>&#8220;f&#8221;<\/span><span>,<\/span><span>&#8220;i&#8221;<\/span><span>,<\/span><span>&#8220;z&#8221;<\/span><span>,<\/span><span>&#8220;x&#8221;<\/span><span>,<\/span><span>&#8220;w&#8221;<\/span><span>,<\/span><span>&#8220;y&#8221;<\/span><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Ints<span>(<\/span>intList<span>)<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Float64s<span>(<\/span>float8List<span>)<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Strings<span>(<\/span>stringList<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Printf<span>(<\/span><span>&#8220;%v<span>n<\/span>%v<span>n<\/span>%v<span>n<\/span>&#8220;<\/span><span>,<\/span>intList<span>,<\/span>float8List<span>,<\/span>stringList<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u964d\u5e8f\u6392\u5e8f <\/p>\n<p>int \u3001 float64 \u548c string \u90fd\u6709\u9ed8\u8ba4\u7684\u5347\u5e8f\u6392\u5e8f\u51fd\u6570\uff0c \u73b0\u5728\u95ee\u9898\u662f\u5982\u679c\u964d\u5e8f\u5982\u4f55 \uff1f \u6709\u5176\u4ed6\u8bed\u8a00\u7f16\u7a0b\u7ecf\u9a8c\u7684\u4eba\u90fd\u77e5\u9053\uff0c\u53ea\u9700\u8981\u4ea4\u6362 cmp \u7684\u6bd4\u8f83\u6cd5\u5219\u5c31\u53ef\u4ee5\u4e86\uff0c go \u7684\u5b9e\u73b0\u662f\u7c7b\u4f3c\u7684\uff0c\u7136\u800c\u53c8\u6709\u6240\u4e0d\u540c\u3002 go \u4e2d\u5bf9\u67d0\u4e2a Type \u7684\u5bf9\u8c61 obj \u6392\u5e8f\uff0c \u53ef\u4ee5\u4f7f\u7528 sort.Sort(obj) \u5373\u53ef\uff0c\u5c31\u662f\u9700\u8981\u5bf9 Type \u7c7b\u578b\u7ed1\u5b9a\u4e09\u4e2a\u65b9\u6cd5 \uff1a Len() \u6c42\u957f\u5ea6\u3001 Less(i,j) \u6bd4\u8f83\u7b2c i \u548c \u7b2c j \u4e2a\u5143\u7d20\u5927\u5c0f\u7684\u51fd\u6570\u3001 Swap(i,j) \u4ea4\u6362\u7b2c i \u548c\u7b2c j \u4e2a\u5143\u7d20\u7684\u51fd\u6570\u3002sort \u5305\u4e0b\u7684\u4e09\u4e2a\u7c7b\u578b IntSlice \u3001 Float64Slice \u3001 StringSlice \u5206\u522b\u5b9e\u73b0\u4e86\u8fd9\u4e09\u4e2a\u65b9\u6cd5\uff0c \u5bf9\u5e94\u6392\u5e8f\u7684\u662f [] int \u3001 [] float64 \u548c [] string \u3002\u5982\u679c\u671f\u671b\u9006\u5e8f\u6392\u5e8f\uff0c \u53ea\u9700\u8981\u5c06\u5bf9\u5e94\u7684 Less \u51fd\u6570\u7b80\u5355\u4fee\u6539\u4e00\u4e0b\u5373\u53ef\u3002<\/p>\n<p>go \u7684 sort \u5305\u53ef\u4ee5\u4f7f\u7528 sort.Reverse(slice) \u6765\u8c03\u6362 slice.Interface.Less \uff0c\u4e5f\u5c31\u662f\u6bd4\u8f83\u51fd\u6570\uff0c\u6240\u4ee5\uff0c int \u3001 float64 \u548c string \u7684\u9006\u5e8f\u6392\u5e8f\u51fd\u6570\u53ef\u4ee5\u8fd9\u4e48\u5199\uff1a<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>intList <span>:=<\/span><span>[]<\/span><span>int<\/span><span>{<\/span><span>2<\/span><span>,<\/span><span>4<\/span><span>,<\/span><span>3<\/span><span>,<\/span><span>5<\/span><span>,<\/span><span>7<\/span><span>,<\/span><span>6<\/span><span>,<\/span><span>9<\/span><span>,<\/span><span>8<\/span><span>,<\/span><span>1<\/span><span>,<\/span><span>0<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p>float8List <span>:=<\/span><span>[]<\/span><span>float64<\/span><span>{<\/span><span>4<\/span><span>.<\/span><span>2<\/span><span>,<\/span><span>5<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>12<\/span><span>.<\/span><span>3<\/span><span>,<\/span><span>10<\/span><span>.<\/span><span>0<\/span><span>,<\/span><span>50<\/span><span>.<\/span><span>4<\/span><span>,<\/span><span>99<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>31<\/span><span>.<\/span><span>4<\/span><span>,<\/span><span>27<\/span><span>.<\/span><span>81828<\/span><span>,<\/span><span>3<\/span><span>.<\/span><span>14<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p>stringList <span>:=<\/span><span>[]<\/span><span>string<\/span><span>{<\/span><span>&#8220;a&#8221;<\/span><span>,<\/span><span>&#8220;c&#8221;<\/span><span>,<\/span><span>&#8220;b&#8221;<\/span><span>,<\/span><span>&#8220;d&#8221;<\/span><span>,<\/span><span>&#8220;f&#8221;<\/span><span>,<\/span><span>&#8220;i&#8221;<\/span><span>,<\/span><span>&#8220;z&#8221;<\/span><span>,<\/span><span>&#8220;x&#8221;<\/span><span>,<\/span><span>&#8220;w&#8221;<\/span><span>,<\/span><span>&#8220;y&#8221;<\/span><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>sort<span>.<\/span>Reverse<span>(<\/span>sort<span>.<\/span>IntSlice<span>(<\/span>intList<span>)))<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>sort<span>.<\/span>Reverse<span>(<\/span>sort<span>.<\/span>Float64Slice<span>(<\/span>float8List<span>)))<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>sort<span>.<\/span>Reverse<span>(<\/span>sort<span>.<\/span>StringSlice<span>(<\/span>stringList<span>)))<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Printf<span>(<\/span><span>&#8220;%v<span>n<\/span>%v<span>n<\/span>%v<span>n<\/span>&#8220;<\/span><span>,<\/span>intList<span>,<\/span>float8List<span>,<\/span>stringList<span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u6df1\u5165\u7406\u89e3\u6392\u5e8f <\/p>\n<p>sort \u5305\u4e2d\u6709\u4e00\u4e2a sort.Interface \u63a5\u53e3\uff0c\u8be5\u63a5\u53e3\u6709\u4e09\u4e2a\u65b9\u6cd5 Len() \u3001 Less(i,j) \u548c Swap(i,j) \u3002 \u901a\u7528\u6392\u5e8f\u51fd\u6570 sort.Sort \u53ef\u4ee5\u6392\u5e8f\u4efb\u4f55\u5b9e\u73b0\u4e86 sort.Inferface \u63a5\u53e3\u7684\u5bf9\u8c61(\u53d8\u91cf)\u3002\u5bf9\u4e8e [] int \u3001[] float64 \u548c [] string \u9664\u4e86\u4f7f\u7528\u7279\u6b8a\u6307\u5b9a\u7684\u51fd\u6570\u5916\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528\u6539\u88c5\u8fc7\u7684\u7c7b\u578b IntSclice \u3001 Float64Slice \u548c StringSlice \uff0c \u7136\u540e\u76f4\u63a5\u8c03\u7528\u5b83\u4eec\u5bf9\u5e94\u7684 Sort() \u65b9\u6cd5\uff1b\u56e0\u4e3a\u8fd9\u4e09\u79cd\u7c7b\u578b\u4e5f\u5b9e\u73b0\u4e86 sort.Interface \u63a5\u53e3\uff0c \u6240\u4ee5\u53ef\u4ee5\u901a\u8fc7 sort.Reverse \u6765\u8f6c\u6362\u8fd9\u4e09\u79cd\u7c7b\u578b\u7684 Interface.Less \u65b9\u6cd5\u6765\u5b9e\u73b0\u9006\u5411\u6392\u5e8f\uff0c \u8fd9\u5c31\u662f\u524d\u9762\u6700\u540e\u4e00\u4e2a\u6392\u5e8f\u7684\u4f7f\u7528\u3002<\/p>\n<p>\u4e0b\u9762\u4f7f\u7528\u4e86\u4e00\u4e2a\u81ea\u5b9a\u4e49(\u7528\u6237\u5b9a\u4e49)\u7684 Reverse \u7ed3\u6784\u4f53\uff0c \u800c\u4e0d\u662f sort.Reverse \u51fd\u6570\uff0c \u6765\u5b9e\u73b0\u9006\u5411\u6392\u5e8f\u3002<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>\/\/ \u81ea\u5b9a\u4e49\u7684 Reverse \u7c7b\u578b<\/span><\/p>\n<\/li>\n<li>\n<p><span>type<\/span>Reverse <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>sort.Interface <span>\/\/ \u8fd9\u6837\uff0c Reverse \u53ef\u4ee5\u63a5\u7eb3\u4efb\u4f55\u5b9e\u73b0\u4e86 sort.Interface (\u5305\u62ec Len, Less, Swap \u4e09\u4e2a\u65b9\u6cd5) \u7684\u5bf9\u8c61<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>\/\/ Reverse \u53ea\u662f\u5c06\u5176\u4e2d\u7684 Inferface.Less \u7684\u987a\u5e8f\u5bf9\u8c03\u4e86\u4e00\u4e0b<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>r Reverse<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>r<span>.<\/span>Interface<span>.<\/span>Less<span>(<\/span>j<span>,<\/span><span>i<\/span><span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>ints <span>:=<\/span><span>[]<\/span><span>int<\/span><span>{<\/span><span>5<\/span><span>,<\/span><span>2<\/span><span>,<\/span><span>6<\/span><span>,<\/span><span>3<\/span><span>,<\/span><span>1<\/span><span>,<\/span><span>4<\/span><span>}<\/span><span>\/\/ \u672a\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span><span>Ints<\/span><span>(<\/span>ints<span>)<\/span><span>\/\/ \u7279\u6b8a\u6392\u5e8f\u51fd\u6570\uff0c \u5347\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;after sort by Ints:<span>t<\/span>&#8220;<\/span><span>,<\/span>ints<span>)<\/span><span>\/\/ [1 2 3 4 5 6]<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>doubles <span>:=<\/span><span>[]<\/span><span>float64<\/span><span>{<\/span><span>2<\/span><span>.<\/span><span>3<\/span><span>,<\/span><span>3<\/span><span>.<\/span><span>2<\/span><span>,<\/span><span>6<\/span><span>.<\/span><span>7<\/span><span>,<\/span><span>10<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>5<\/span><span>.<\/span><span>4<\/span><span>,<\/span><span>1<\/span><span>.<\/span><span>8<\/span><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Float64s<span>(<\/span>doubles<span>)<\/span><span>\/\/ float64 \u6392\u5e8f\u7248\u672c 1<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;after sort by Float64s:<span>t<\/span>&#8220;<\/span><span>,<\/span>doubles<span>)<\/span><span>\/\/ [1.8 2.3 3.2 5.4 6.7 10.9]<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>strings <span>:=<\/span><span>[]<\/span><span>string<\/span><span>{<\/span><span>&#8220;hello&#8221;<\/span><span>,<\/span><span>&#8220;good&#8221;<\/span><span>,<\/span><span>&#8220;students&#8221;<\/span><span>,<\/span><span>&#8220;morning&#8221;<\/span><span>,<\/span><span>&#8220;people&#8221;<\/span><span>,<\/span><span>&#8220;world&#8221;<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span><span>Strings<\/span><span>(<\/span>strings<span>)<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;after sort by Strings:<span>t<\/span>&#8220;<\/span><span>,<\/span>strings<span>)<\/span><span>\/\/ [good hello mornig people students world]<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>ipos <span>:=<\/span>sort<span>.<\/span>SearchInts<span>(<\/span>ints<span>,<\/span><span>&#8211;<\/span><span>1<\/span><span>)<\/span><span>\/\/ int \u641c\u7d22<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Printf<\/span><span>(<\/span><span>&#8220;pos of 5 is %d th<span>n<\/span>&#8220;<\/span><span>,<\/span>ipos<span>)<\/span><span>\/\/ \u5e76\u4e0d\u603b\u662f\u6b63\u786e\u5440 ! (\u641c\u7d22\u4e0d\u662f\u91cd\u70b9)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>dpos <span>:=<\/span>sort<span>.<\/span>SearchFloat64s<span>(<\/span>doubles<span>,<\/span><span>20<\/span><span>.<\/span><span>1<\/span><span>)<\/span><span>\/\/ float64 \u641c\u7d22<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Printf<\/span><span>(<\/span><span>&#8220;pos of 5.0 is %d th<span>n<\/span>&#8220;<\/span><span>,<\/span>dpos<span>)<\/span><span>\/\/ \u5e76\u4e0d\u603b\u662f\u6b63\u786e\u5440 !<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span><span>Printf<\/span><span>(<\/span><span>&#8220;doubles is asc ? %v<span>n<\/span>&#8220;<\/span><span>,<\/span>sort<span>.<\/span>Float64sAreSorted<span>(<\/span>doubles<span>))<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>doubles <span>=<\/span><span>[]<\/span><span>float64<\/span><span>{<\/span><span>3<\/span><span>.<\/span><span>5<\/span><span>,<\/span><span>4<\/span><span>.<\/span><span>2<\/span><span>,<\/span><span>8<\/span><span>.<\/span><span>9<\/span><span>,<\/span><span>100<\/span><span>.<\/span><span>98<\/span><span>,<\/span><span>20<\/span><span>.<\/span><span>14<\/span><span>,<\/span><span>79<\/span><span>.<\/span><span>32<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>\/\/ sort.Sort(sort.Float64Slice(doubles)) \/\/ float64 \u6392\u5e8f\u65b9\u6cd5 2<\/span><\/p>\n<\/li>\n<li>\n<p><span>\/\/ fmt.Println(&#8220;after sort by Sort:t&#8221;, doubles) \/\/ [3.5 4.2 8.9 20.14 79.32 100.98]<\/span><\/p>\n<\/li>\n<li>\n<p><span>(<\/span>sort<span>.<\/span>Float64Slice<span>(<\/span>doubles<span>))<\/span><span>.<\/span>Sort<span>()<\/span><span>\/\/ float64 \u6392\u5e8f\u65b9\u6cd5 3<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;after sort by Sort:<span>t<\/span>&#8220;<\/span><span>,<\/span>doubles<span>)<\/span><span>\/\/ [3.5 4.2 8.9 20.14 79.32 100.98]<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>Reverse<span>{<\/span>sort<span>.<\/span>Float64Slice<span>(<\/span>doubles<span>)})<\/span><span>\/\/ float64 \u9006\u5e8f\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;after sort by Reversed Sort:<span>t<\/span>&#8220;<\/span><span>,<\/span>doubles<span>)<\/span><span>\/\/ [100.98 79.32 20.14 8.9 4.2 3.5]<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>sort.Ints \/ sort.Float64s \/ sort.Strings \u5206\u522b\u6765\u5bf9\u6574\u578b\/\u6d6e\u70b9\u578b\/\u5b57\u7b26\u4e32\u578b\u5206\u7247\u6216\u662f\u53eb\u505a\u7247\u6bb5\uff0c\u6216\u662f\u4e0d\u4e25\u683c\u6ef4\u8bf4\u662f\u6570\u7ec4\uff0c\u8fdb\u884c\u6392\u5e8f\u3002\u7136\u540e\u662f\u6709\u4e2a\u6d4b\u8bd5\u662f\u5426\u6709\u5e8f\u7684\u51fd\u6570\u3002\u8fd8\u6709\u5206\u522b\u5bf9\u5e94\u7684 search \u51fd\u6570\uff0c\u4e0d\u8fc7\uff0c\u53d1\u73b0\u641c\u7d22\u51fd\u6570\u53ea\u80fd\u5b9a\u4f4d\u5230\u5982\u679c\u5b58\u5728\u7684\u8bdd\u7684\u4f4d\u7f6e\uff0c\u4e0d\u5b58\u5728\u7684\u8bdd\uff0c\u4f4d\u7f6e\u5c31\u662f\u4e0d\u5bf9\u7684\u3002<\/p>\n<p>\u5173\u4e8e\u4e00\u822c\u7684\u6570\u7ec4\u6392\u5e8f\uff0c\u7a0b\u5e8f\u4e2d\u663e\u793a\u4e86\uff0c\u6709 3 \u79cd\u65b9\u6cd5\uff01\u76ee\u524d\u63d0\u4f9b\u7684\u4e09\u79cd\u7c7b\u578b int\uff0cfloat64 \u548c string \u5448\u73b0\u5bf9\u79f0\u7684\uff0c\u4e5f\u5c31\u662f\u4f60\u6709\u7684\uff0c\u5bf9\u5e94\u7684\u6211\u4e5f\u6709\u3002<\/p>\n<p>\u5173\u4e8e\u7ffb\u8f6c\u6392\u5e8f\u6216\u662f\u9006\u5411\u6392\u5e8f\uff0c\u5c31\u662f\u7528\u4e2a\u7ffb\u8f6c\u7ed3\u6784\u4f53\uff0c\u91cd\u5199 Less \u51fd\u6570\u5373\u53ef\u3002\u4e0a\u9762\u7684 Reverse \u662f\u4e2a\u901a\u7528\u7684\u7ed3\u6784\u4f53\u3002<\/p>\n<p>\u4e0a\u9762\u8bf4\u4e86\u90a3\u4e48\u591a\uff0c \u53ea\u662f\u5bf9\u57fa\u672c\u7c7b\u578b\u8fdb\u884c\u6392\u5e8f\uff0c \u8be5\u5230\u8bf4\u8bf4 struct \u7ed3\u6784\u4f53\u7c7b\u578b\u7684\u6392\u5e8f\u7684\u65f6\u5019\u4e86\uff0c \u5b9e\u9645\u4e2d\u8fd9\u4e2a\u7528\u5f97\u5230\u7684\u4f1a\u66f4\u591a\u3002<\/p>\n<p>\u7ed3\u6784\u4f53\u7c7b\u578b\u7684\u6392\u5e8f<\/p>\n<p>\u7ed3\u6784\u4f53\u7c7b\u578b\u7684\u6392\u5e8f\u662f\u901a\u8fc7\u4f7f\u7528 sort.Sort(slice) \u5b9e\u73b0\u7684\uff0c \u53ea\u8981 slice \u5b9e\u73b0\u4e86 sort.Interface \u7684\u4e09\u4e2a\u65b9\u6cd5\u5c31\u53ef\u4ee5\u3002 \u867d\u7136\u8fd9\u4e48\u8bf4\uff0c\u4f46\u662f\u6392\u5e8f\u7684\u65b9\u6cd5\u5374\u6709\u90a3\u4e48\u597d\u51e0\u79cd\u3002\u9996\u5148\u4e00\u79cd\u5c31\u662f\u6a21\u62df\u6392\u5e8f [] int \u6784\u9020\u5bf9\u5e94\u7684 IntSlice \u7c7b\u578b\uff0c\u7136\u540e\u5bf9 IntSlice \u7c7b\u578b\u5b9e\u73b0 Interface \u7684\u4e09\u4e2a\u65b9\u6cd5\u3002<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.fagao.me\/images\/uploads\/2021_016.jpg\" alt=\"\"><\/p>\n<p>\u7ed3\u6784\u4f53\u6392\u5e8f\u65b9\u6cd5 1<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>Person <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>Name <span>string<\/span><span>\/\/ \u59d3\u540d<\/span><\/p>\n<\/li>\n<li>\n<p>Age <span>int<\/span><span>\/\/ \u5e74\u7eaa<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>\/\/ \u6309\u7167 Person.Age \u4ece\u5927\u5230\u5c0f\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>type<\/span>PersonSlice <span>[]<\/span>Person<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>a PersonSlice<span>)<\/span>Len<span>()<\/span><span>int<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Len() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span><span>len<\/span><span>(<\/span>a<span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>a PersonSlice<span>)<\/span>Swap<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>){<\/span><span>\/\/ \u91cd\u5199 Swap() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p>a<span>[<\/span><span>i<\/span><span>],<\/span>a<span>[<\/span>j<span>]<\/span><span>=<\/span>a<span>[<\/span>j<span>],<\/span>a<span>[<\/span><span>i<\/span><span>]<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>a PersonSlice<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Less() \u65b9\u6cd5\uff0c \u4ece\u5927\u5230\u5c0f\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>a<span>[<\/span>j<span>]<\/span><span>.<\/span>Age &lt; a<span>[<\/span><span>i<\/span><span>]<\/span><span>.<\/span>Age<\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>people <span>:=<\/span><span>[]<\/span>Person<span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhang san&#8221;<\/span><span>,<\/span><span>12<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;li si&#8221;<\/span><span>,<\/span><span>30<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;wang wu&#8221;<\/span><span>,<\/span><span>52<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhao liu&#8221;<\/span><span>,<\/span><span>26<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>PersonSlice<span>(<\/span>people<span>))<\/span><span>\/\/ \u6309\u7167 Age \u7684\u9006\u5e8f\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span><span>Sort<\/span><span>(<\/span>sort<span>.<\/span><span>Reverse<\/span><span>(<\/span>PersonSlice<span>(<\/span>people<span>)))<\/span><span>\/\/ \u6309\u7167 Age \u7684\u5347\u5e8f\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u8fd9\u5b8c\u5168\u662f\u4e00\u79cd\u6a21\u62df\u7684\u65b9\u5f0f\uff0c\u6240\u4ee5\u5982\u679c\u61c2\u4e86 IntSlice \u81ea\u7136\u5c31\u7406\u89e3\u8fd9\u91cc\u4e86\uff0c\u53cd\u8fc7\u6765\uff0c\u7406\u89e3\u4e86\u8fd9\u91cc\u90a3\u4e48 IntSlice \u90a3\u91cc\u4e5f\u5c31\u61c2\u4e86\u3002<\/p>\n<p>\u7ed3\u6784\u4f53\u6392\u5e8f\u65b9\u6cd5 2<\/p>\n<p>\u65b9\u6cd5 1 \u7684\u7f3a\u70b9\u662f \uff1a \u6839\u636e Age \u6392\u5e8f\u9700\u8981\u91cd\u65b0\u5b9a\u4e49 PersonSlice \u65b9\u6cd5\uff0c\u7ed1\u5b9a Len \u3001 Less \u548c Swap \u65b9\u6cd5\uff0c \u5982\u679c\u9700\u8981\u6839\u636e Name \u6392\u5e8f\uff0c \u53c8\u9700\u8981\u91cd\u65b0\u5199\u4e09\u4e2a\u51fd\u6570\uff1b \u5982\u679c\u7ed3\u6784\u4f53\u6709 4 \u4e2a\u5b57\u6bb5\uff0c\u6709\u56db\u79cd\u7c7b\u578b\u7684\u6392\u5e8f\uff0c\u90a3\u4e48\u5c31\u8981\u5199 3 \u00d7 4 = 12 \u4e2a\u65b9\u6cd5\uff0c \u5373\u4f7f\u6709\u4e00\u4e9b\u5b8c\u5168\u662f\u591a\u4f59\u7684\uff0c O__O&#8221;\u2026 \u4ed4\u7ec6\u601d\u91cf\u4e00\u4e0b\uff0c\u6839\u636e\u4e0d\u540c\u7684\u6807\u51c6 Age \u6216\u662f Name\uff0c \u771f\u6b63\u4e0d\u540c\u7684\u4f53\u73b0\u5728 Less \u65b9\u6cd5\u4e0a\uff0c\u6240\u4ee5\uff0c me \u4eec\u5c06 Less \u62bd\u8c61\u51fa\u6765\uff0c \u6bcf\u79cd\u6392\u5e8f\u7684 Less \u8ba9\u5176\u53d8\u6210\u52a8\u6001\u7684\uff0c\u6bd4\u5982\u4e0b\u9762\u4e00\u79cd\u65b9\u6cd5\u3002<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>Person <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>Name <span>string<\/span><span>\/\/ \u59d3\u540d<\/span><\/p>\n<\/li>\n<li>\n<p>Age <span>int<\/span><span>\/\/ \u5e74\u7eaa<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>PersonWrapper <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>people <span>[]<\/span>Person<\/p>\n<\/li>\n<li>\n<p>by <span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Len<span>()<\/span><span>int<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Len() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span><span>len<\/span><span>(<\/span>pw<span>.<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Swap<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>){<\/span><span>\/\/ \u91cd\u5199 Swap() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p>pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>],<\/span>pw<span>.<\/span>people<span>[<\/span>j<span>]<\/span><span>=<\/span>pw<span>.<\/span>people<span>[<\/span>j<span>],<\/span>pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>]<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Less() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>pw<span>.<\/span>by<span>(<\/span>&amp;pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>],<\/span>&amp;pw<span>.<\/span>people<span>[<\/span>j<span>])<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>people <span>:=<\/span><span>[]<\/span>Person<span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhang san&#8221;<\/span><span>,<\/span><span>12<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;li si&#8221;<\/span><span>,<\/span><span>30<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;wang wu&#8221;<\/span><span>,<\/span><span>52<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhao liu&#8221;<\/span><span>,<\/span><span>26<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>PersonWrapper<span>{<\/span>people<span>,<\/span><span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>q<span>.<\/span>Age &lt; p<span>.<\/span>Age <span>\/\/ Age \u9012\u51cf\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>}})<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>PersonWrapper<span>{<\/span>people<span>,<\/span><span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>p<span>.<\/span>Name &lt; q<span>.<\/span>Name <span>\/\/ Name \u9012\u589e\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>}})<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u65b9\u6cd5 2 \u5c06 [] Person \u548c\u6bd4\u8f83\u7684\u51c6\u5219 cmp \u5c01\u88c5\u5728\u4e86\u4e00\u8d77\uff0c\u5f62\u6210\u4e86 PersonWrapper \u51fd\u6570\uff0c\u7136\u540e\u5728\u5176\u4e0a\u7ed1\u5b9a Len \u3001 Less \u548c Swap \u65b9\u6cd5\u3002 \u5b9e\u9645\u4e0a sort.Sort(pw) \u6392\u5e8f\u7684\u662f pw \u4e2d\u7684 people\uff0c \u8fd9\u5c31\u662f\u524d\u9762\u8bf4\u7684\uff0c<span>go \u7684\u6392\u5e8f\u672a\u5fc5\u5c31\u662f\u9488\u5bf9\u7684\u4e00\u4e2a\u6570\u7ec4\u6216\u662f slice\uff0c \u800c\u53ef\u4ee5\u662f\u4e00\u4e2a\u5bf9\u8c61\u4e2d\u7684\u6570\u7ec4\u6216\u662f slice <\/span>\u3002<\/p>\n<p>\u7ed3\u6784\u4f53\u6392\u5e8f\u65b9\u6cd5 3<\/p>\n<p>me \u8d76\u811a\u65b9\u6cd5 2 \u5df2\u7ecf\u5f88\u4e0d\u9519\u4e86\uff0c \u552f\u4e00\u4e00\u4e2a\u7f3a\u70b9\u662f\uff0c\u5728 main \u4e2d\u4f7f\u7528\u7684\u65f6\u5019\u66b4\u9732\u4e86 sort.Sort \u7684\u4f7f\u7528\uff0c\u8fd8\u6709\u5c31\u662f PersonWrapper \u7684\u6784\u9020\u3002 \u4e3a\u4e86\u8ba9 main \u4e2d\u4f7f\u7528\u8d77\u6765\u66f4\u4e3a\u65b9\u4fbf\uff0c me \u4eec\u53ef\u4ee5\u518d\u7b80\u5355\u7684\u5c01\u88c5\u4e00\u4e0b\uff0c \u6784\u9020\u4e00\u4e2a SortPerson \u65b9\u6cd5\uff0c \u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>Person <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>Name <span>string<\/span><span>\/\/ \u59d3\u540d<\/span><\/p>\n<\/li>\n<li>\n<p>Age <span>int<\/span><span>\/\/ \u5e74\u7eaa<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>PersonWrapper <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>people <span>[]<\/span>Person<\/p>\n<\/li>\n<li>\n<p>by <span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>SortBy <span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Len<span>()<\/span><span>int<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Len() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span><span>len<\/span><span>(<\/span>pw<span>.<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Swap<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>){<\/span><span>\/\/ \u91cd\u5199 Swap() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p>pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>],<\/span>pw<span>.<\/span>people<span>[<\/span>j<span>]<\/span><span>=<\/span>pw<span>.<\/span>people<span>[<\/span>j<span>],<\/span>pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>]<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>pw PersonWrapper<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><span>\/\/ \u91cd\u5199 Less() \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>pw<span>.<\/span>by<span>(<\/span>&amp;pw<span>.<\/span>people<span>[<\/span><span>i<\/span><span>],<\/span>&amp;pw<span>.<\/span>people<span>[<\/span>j<span>])<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>SortPerson<span>(<\/span>people <span>[]<\/span>Person<span>,<\/span>by SortBy<span>){<\/span><span>\/\/ SortPerson \u65b9\u6cd5<\/span><\/p>\n<\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>PersonWrapper<span>{<\/span>people<span>,<\/span>by<span>})<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>people <span>:=<\/span><span>[]<\/span>Person<span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhang san&#8221;<\/span><span>,<\/span><span>12<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;li si&#8221;<\/span><span>,<\/span><span>30<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;wang wu&#8221;<\/span><span>,<\/span><span>52<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;zhao liu&#8221;<\/span><span>,<\/span><span>26<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>PersonWrapper<span>{<\/span>people<span>,<\/span><span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>q<span>.<\/span>Age &lt; p<span>.<\/span>Age <span>\/\/ Age \u9012\u51cf\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>}})<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>SortPerson<span>(<\/span>people<span>,<\/span><span>func<\/span><span>(<\/span>p<span>,<\/span>q <span>*<\/span>Person<span>)<\/span><span>bool<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>return<\/span>p<span>.<\/span>Name &lt; q<span>.<\/span>Name <span>\/\/ Name \u9012\u589e\u6392\u5e8f<\/span><\/p>\n<\/li>\n<li>\n<p><span>})<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span>people<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u5728\u65b9\u6cd5 2 \u7684\u57fa\u7840\u4e0a\u6784\u9020\u4e86 SortPerson \u51fd\u6570\uff0c\u4f7f\u7528\u7684\u65f6\u5019\u4f20\u8fc7\u53bb\u4e00\u4e2a [] Person \u548c\u4e00\u4e2a cmp \u51fd\u6570\u3002<\/p>\n<p>\u7ed3\u6784\u4f53\u6392\u5e8f\u65b9\u6cd5 4<\/p>\n<p>\u4e0b\u9762\u662f\u53e6\u5916\u4e00\u4e2a\u5b9e\u73b0\u601d\u8def\uff0c \u53ef\u4ee5\u8bf4\u662f\u65b9\u6cd5 1\u3001 2 \u7684\u53d8\u4f53\u3002<\/p>\n<ol>\n<li>\n<p><span>package<\/span>main<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>import<\/span><span>(<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;fmt&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>&#8220;sort&#8221;<\/span><\/p>\n<\/li>\n<li>\n<p><span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>Person <span>struct<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>Name <span>string<\/span><\/p>\n<\/li>\n<li>\n<p>Weight <span>int<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>PersonSlice <span>[]<\/span>Person<\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>s PersonSlice<span>)<\/span>Len<span>()<\/span><span>int<\/span><span>{<\/span><span>return<\/span><span>len<\/span><span>(<\/span>s<span>)<\/span><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>s PersonSlice<span>)<\/span>Swap<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>{<\/span>s<span>[<\/span><span>i<\/span><span>],<\/span>s<span>[<\/span>j<span>]<\/span><span>=<\/span>s<span>[<\/span>j<span>],<\/span>s<span>[<\/span><span>i<\/span><span>]<\/span><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>ByName <span>struct<\/span><span>{<\/span>PersonSlice <span>}<\/span><span>\/\/ \u5c06 PersonSlice \u5305\u88c5\u8d77\u6765\u5230 ByName \u4e2d<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>s ByName<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><span>return<\/span>s<span>.<\/span>PersonSlice<span>[<\/span><span>i<\/span><span>]<\/span><span>.<\/span>Name &lt; s<span>.<\/span>PersonSlice<span>[<\/span>j<span>]<\/span><span>.<\/span>Name <span>}<\/span><span>\/\/ \u5c06 Less \u7ed1\u5b9a\u5230 ByName \u4e0a<\/span><\/p>\n<\/li>\n<li><\/li>\n<li><\/li>\n<li>\n<p><span>type<\/span>ByWeight <span>struct<\/span><span>{<\/span>PersonSlice <span>}<\/span><span>\/\/ \u5c06 PersonSlice \u5305\u88c5\u8d77\u6765\u5230 ByWeight \u4e2d<\/span><\/p>\n<\/li>\n<li>\n<p><span>func<\/span><span>(<\/span>s ByWeight<span>)<\/span>Less<span>(<\/span><span>i<\/span><span>,<\/span>j <span>int<\/span><span>)<\/span><span>bool<\/span><span>{<\/span><span>return<\/span>s<span>.<\/span>PersonSlice<span>[<\/span><span>i<\/span><span>]<\/span><span>.<\/span>Weight &lt; s<span>.<\/span>PersonSlice<span>[<\/span>j<span>]<\/span><span>.<\/span>Weight<span>}<\/span><span>\/\/ \u5c06 Less \u7ed1\u5b9a\u5230 ByWeight \u4e0a<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>main<span>()<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p>s <span>:=<\/span><span>[]<\/span>Person<span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;apple&#8221;<\/span><span>,<\/span><span>12<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;pear&#8221;<\/span><span>,<\/span><span>20<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;banana&#8221;<\/span><span>,<\/span><span>50<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;orange&#8221;<\/span><span>,<\/span><span>87<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;hello&#8221;<\/span><span>,<\/span><span>34<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>{<\/span><span>&#8220;world&#8221;<\/span><span>,<\/span><span>43<\/span><span>},<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span>Sort<span>(<\/span>ByWeight<span>{<\/span>s<span>})<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span>Println<span>(<\/span><span>&#8220;People by weight:&#8221;<\/span><span>)<\/span><\/p>\n<\/li>\n<li>\n<p>printPeople<span>(<\/span>s<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p>sort<span>.<\/span><span>Sort<\/span><span>(<\/span>ByName<span>{<\/span>s<span>})<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span><span>Println<\/span><span>(<\/span><span>&#8220;<span>n<\/span>People by name:&#8221;<\/span><span>)<\/span><\/p>\n<\/li>\n<li>\n<p>printPeople<span>(<\/span>s<span>)<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li><\/li>\n<li>\n<p><span>func<\/span>printPeople<span>(<\/span>s <span>[]<\/span>Person<span>)<\/span><span>{<\/span><\/p>\n<\/li>\n<li>\n<p><span>for<\/span>_<span>,<\/span>o <span>:=<\/span><span>range<\/span>s <span>{<\/span><\/p>\n<\/li>\n<li>\n<p>fmt<span>.<\/span>Printf<span>(<\/span><span>&#8220;%-8s (%v)<span>n<\/span>&#8220;<\/span><span>,<\/span>o<span>.<\/span><span>Name<\/span><span>,<\/span>o<span>.<\/span><span>Weight<\/span><span>)<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<li>\n<p><span>}<\/span><\/p>\n<\/li>\n<\/ol>\n<p>\u5bf9\u7ed3\u6784\u4f53\u7684\u6392\u5e8f\uff0c \u6682\u65f6\u5c31\u5230\u8fd9\u91cc\u3002 \u7b2c\u4e00\u79cd\u6392\u5e8f\u5bf9\u53ea\u6839\u636e\u4e00\u4e2a\u5b57\u6bb5\u7684\u6bd4\u8f83\u5408\u9002\uff0c \u53e6\u5916\u4e09\u4e2a\u662f\u9488\u5bf9\u53ef\u80fd\u6839\u636e\u591a\u4e2a\u5b57\u6bb5\u6392\u5e8f\u7684\u3002\u65b9\u6cd5 4 me \u8ba4\u4e3a\u6bcf\u6b21\u90fd\u8981\u591a\u6784\u9020\u4e00\u4e2a ByXXX \uff0c \u9887\u4e3a\u4e0d\u4fbf\uff0c \u8fd9\u6837\u591a\u9ebb\u70e6\uff0c\u4e0d\u5982\u65b9\u6cd5 2 \u548c\u65b9\u6cd5 3 \u6765\u7684\u65b9\u4fbf\uff0c\u76f4\u63a5\u4f20\u8fdb\u53bb\u4e00\u4e2a cmp \uff0c\u7136\u540e okay \u3002 2\u3001 3 \u6ca1\u6709\u592a\u5927\u7684\u5dee\u522b\uff0c 3 \u53ea\u662f\u7b80\u5355\u5c01\u88c5\u4e86\u4e00\u4e0b\u800c\u5df2\uff0c \u5bf9\u4e8e\u4f7f\u7528\u8005\u6765\u8bf4\uff0c \u53ef\u80fd\u4f1a\u66f4\u65b9\u4fbf\u4e00\u4e9b\uff0c\u800c\u4e14\u4e5f\u4f1a\u66f4\u5c11\u7684\u51fa\u9519\u3002<\/p>\n<p>\u5173\u4e8e go \u7684\u6392\u5e8f\u8fd8\u6ca1\u6709\u7ed3\u675f\uff0c \u5982\u679c u \u5df2\u7ecf\u7d2f\u4e86\uff0c \u5c31\u6b47\u6b47\u53bb\u5427\uff0c =_=<\/p>\n<p>\u672c\u6587\u6765\u81ea\uff1a\u9646\u4ec1\u8d3e\u4e2a\u4eba\u7ad9\u70b9<\/p>\n<p>\u611f\u8c22\u4f5c\u8005\uff1a\u9646\u4ec1\u8d3e<\/p>\n<p>\u67e5\u770b\u539f\u6587\uff1ago\u8bed\u8a00\u7684\u6392\u5e8f\u548c\u641c\u7d22<\/p>\n<div class=\"articleend\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u665a\u4e0a\u51c6\u5907\u52a8\u624b\u5199\u70b9 go \u7684\u7a0b\u5e8f\u7684\u65f6\u5019\uff0c\u60f3\u8d77 go \u5982\u4f55\u6392\u5e8f\u7684\u95ee\u9898\u3002\u6392\u5e8f sort \u662f\u4e2a\u57fa\u672c\u7684\u64cd\u4f5c\uff0c\u5f53\u7136\u641c\u7d22 s [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[183],"class_list":["post-117659","post","type-post","status-publish","format-standard","hentry","category-news","tag-183"],"_links":{"self":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts\/117659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/comments?post=117659"}],"version-history":[{"count":0,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/posts\/117659\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/media?parent=117659"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/categories?post=117659"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fagao.me\/p\/wp-json\/wp\/v2\/tags?post=117659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}