2016-12-28 40 views
-1
創建不定長片

我在轉到新的,我有2個問題:如何去

1比方說,我們有簡單的for循環用C#編寫:

static void Main(string[] args) 
    { 
     List<int> list = new List<int>(); 
     for (int i = 1; i < 10000; i++) 
     { 
      if (i % 5 == 0 && i % 3 == 0) 
      { 
       list.Add(i); 
      } 
     } 
     foreach (int prime in list) 
     { 
      System.Console.WriteLine(prime); 
     } 
     Console.ReadKey(); 
    } 

如果我想在Go中執行相同的操作,我將不得不使用切片。但如何做到這一點?

  • 哪個變量聲明形式的更常用: 短形式(S:= 3) 或 長(VAR小號INT = 3)?
  • +1

    Go中的切片長度不是固定的。這是我見過的最好的文章:https://blog.golang.org/go-slices-usage-and-internals – miltonb

    +0

    關於變量聲明風格,當初始化一個變量爲特定值時,我使用簡寫形式,但是當聲明稍後將要設置的變量時(或者聲明一個只能用'var'完成的包變量(即,在任何塊之外)的變量的長格式)。 –

    +0

    @seeker有三個答案已經檢查,如果他們中的任何一個幫助接受答案其他明智的評論在這裏,什麼是缺少 –

    回答

    0

    在Go數組中有它們的位置,但它們有點不靈活,所以你在Go代碼中看不到它們太多。切片,無處不在。他們建立在陣列上以提供強大的功能和便利。

    切片不是固定的長度。它很靈活。

    您可以宣告空切片如下

    list := make([]int, 0) 
    list := []int{} 
    var list []int 
    

    這裏是您如何正確的去

    package main 
    
    import (
        "fmt" 
    ) 
    
    
    func main() { 
         var list []int 
         for i:=0;i<10000;i++ { 
          if i %5 == 0 && i % 3 == 0 { 
           list = append(list, i) 
          } 
         } 
         for _, val := range list { 
          fmt.Println(val) 
         } 
    } 
    

    這裏的上述功能是播放鏈接play

    +0

    @seeker檢查這個,如果這可以幫助你,接受anwer –

    +0

    也很重要的是指出,如果您已經知道要創建的切片的長度,則應在調用make([] int,150)'時指定該值而不是零。這對於編譯器來說更有效率,編譯器必須在每次追加超出後備數組邊界時創建新的後備數組。通過在'make'調用中指定長度(在這種情況下爲150),您的切片將包含所有索引達到150的所有零值。然後您可以分配新值,如:list [4] = 123'調用'追加' – daltonclaybrook

    +0

    @daltonclaybrook絕對,在這裏我試圖給一個樣本,以便他可以開始使用切片 –

    1

    1)創建一個切片:

    list := make([]int, 0) 
    

    附加到一個切片:

    list = append(list, i) 
    

    2)我覺得沒有一個統一的答案,你的第二個問題。這取決於變量的使用方式和位置。

    0

    對於2) 我使用「:=」爲我想與另一個變量相同的類型,並使用其他 像 var foo int = 3 //我想要一個int變量 bar:= foo //我想要bar與foo相同的類型