2021年12月28日 星期二

【Let's Go】GoLang 關於 slice 的一些操作

 跟python比起來~~GoLang真的是比較精簡,重複性的東西幾乎是不太會出現的!

相對python而言,個人覺得GoLang更重視如何提供一個良好的「鍋子」讓「廚師」盡情發揮自身的廚藝及創意。而python則是著重於提供各式各樣的廚具,讓每個人不需具備太多廚藝就可以享受烹飪的樂趣!

針對之前談到的SLICE,在GoLang中不像python的list提供了許多函式可供應用的函式進行操作與應用,如:刪除、查詢、轉換等等~~,這些在GoLang中似乎認為可經由程式設計人員透過自身需求,進行設計即可有效解決,就無需代勞提供相關函式庫,提供最大的彈性空間給設計人員自行思考、設計!

就這觀點而言,自己操作起來~~發現其實:就程式設計的邏輯思維能力訓練而言,GoLang似乎比Python更加適合進行邏輯思維能力的訓練與思考!(純粹個人感受~~😏)

好囉~~~接續上一篇關於slice的相關基本設定,這一篇整理一些關於slice的複製、篩選、替換、排序等相關操作練習紀錄!

好了~~~直接上程式碼🐎時間

package main

import (
	"fmt"
	"sort"
)

func main() {
	//array設定
	var a1 = [5]string{"PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
	//slice設定方式
	var s1 = []string{"ASP", "PHP", "ASP.NET", "JAVA", "Pyhton", "GoLang"}
	var s2 []string
	s3 := []int{10, 50, 30, 60, 40, 20}

	//GoLang不像python有針對slice刪除等相關函數,而是透過slice的操作功能進行類似刪除的相關操作
	fmt.Println(a1[2:4])
	s4 := make([]string, 3) //創建一個有3組元素的slice
	copy(s4, s1[2:5])
	fmt.Println(s4)
	fmt.Println(s1[:5])
	s2 = append(s1[:2], s1[4:]...) //去除原slice中的"ASP.NET" "JAVA"二個元素
	fmt.Println(s2)

	//SLICE元素排序操作
	fmt.Printf("排序前的s3:%v \n", s3)
	sort.Ints(s3) //整數型slice排序方法
	fmt.Printf("排序後的s3:%v \n", s3)
	fmt.Printf("排序後最大值、最小值:%d、%d \n", s3[len(s3)-1], s3[0])
	sort.Strings(s2) //文字型slice排序方法
	fmt.Printf("string類型的slice也可以排序:%v \n", s2)
	for k, v := range s2 {
		fmt.Printf("slice s2的k,v分別為:%d, %s \n", k, v)
	}
	s2[0] = "java" //元素替換
	fmt.Println(s2)
	//達成s3內每個元素*2的作法
	for k, v := range s3 {
		s3[k] = v * 2
	}
	fmt.Println(s3)

	//應用map函式產生類似字典檔對應表簡易操作示範
    s5 := map[string]int{
		s1[0]: s3[0],
		s1[1]: s3[1],
		s1[2]: s3[2],
		s1[3]: s3[3],
	}
	fmt.Println(s5)
	fmt.Println(s5["ASP"]) //不存在的對應值為0
	fmt.Println(s5["java"])
}

執行結果截圖如下供參:


當然在實際操作及應用上,仍有相關函式可供配合進行相關操作與設計應用,這些應用就留在後續進行相關專案設計時,有機會再做整理、分享了!

好囉~~這次就先到這裡告一段落!!

沒有留言:

張貼留言