0

[golang-book]: http://www.golang-book.comを読んで、練習を進めながら演習を完了しています。第 6 章では、並べ替えられていないリスト [x] で最小の要素を見つけなければならない演習があります。

次のコードがありますが、メソッドの長さ (len) が14 行目でエラーになる理由がわかりません: x.len undefined (type []int has no field or method len)

package main

import "fmt"

func main() {
    x := []int{
        48, 96, 86, 68,
        57, 82, 63, 70,
        37, 34, 83, 27,
        19, 97, 9, 17,
    }

    small := x[0]
    for i := 1; i < x.len(); i++ {
        if x[i] < small {
            fmt.Println(x[i])
        }
    }
}

私が使用したロジックはグーグル化されたので、おそらく配列に len メソッドはありませんか? どんな助けでも大歓迎です。

4

3 に答える 3

8

配列とスライスにはlen()メソッドがありません。len()関数は言語に組み込まれています。

だからあなたのコード

for i := 1; i < x.len(); i++ {

する必要があります

for i := 1; i < len(x); i++ {

これが遊び場での作業バージョンです。

package main

import "fmt"

func main(){
    x := []int{
        48,96,86,68,
        57,82,63,70,
        37,34,83,27,
        19,97, 9,17,
    }   

    small := x[0]
    for i := 1; i < len(x); i++ {
        if x[i] < small { 
        fmt.Println(x[i]);
        }
    }
}
于 2013-02-27T21:07:52.570 に答える
4

len()スライスの方法ではありません。グローバル関数です。あなたが言いたいlen(x)

package main

import "fmt"

func main() {
    x := []int{
        48, 96, 86, 68,
        57, 82, 63, 70,
        37, 34, 83, 27,
        19, 97, 9, 17,
    }

    small := x[0]
    for i := 1; i < len(x); i++ {
        if x[i] < small {
            fmt.Println(x[i])
        }
    }
}
于 2013-02-27T21:07:23.467 に答える
1

実際、配列型とスライス型は、次のようにメソッドを持つことができます。len()

http://play.golang.org/p/CkU4LJZgUb

package main

import "fmt"

type SliceType []int

func (s SliceType) len() int {
    return len(s)
}

func main() {
    s := SliceType{1, 2, 3, 4, 5, 6, 7, 8, 9}
    for i := 0; i < s.len(); i++ {
        fmt.Println(s[i])
    }
}

あなたが見つけたコードはおそらくcontainer/listまたはの実装でありcontainer/ring、どちらもLen()メソッドを指定しています。

ただし、プリミティブ スライスと配列にはメソッドが関連付けられていないため、組み込み関数を使用する必要がありますlen()

于 2013-02-27T22:39:48.937 に答える