2016-05-04 23 views
0

したがって、配列に(クラスメソッドのように)接続された関数で、スライス名を変更しました。構造体の配列をstruct関数に渡す方法

func (p Points) Merge(ip Points) { 
    fmt.Println(p) 
} 
:私はいくつかの問題を持っている

type Points []Point 


func (p Points) Isset(ip Point) bool { 
    for _, i := range p { 
     if i.Hash == ip.Hash { 
      return true 
     } 
    } 
    return false 
} 

しかし、それは問題ではありませんです、タイプポイントとスライスを渡そうとしました互いの機能、中だって、...ここで

は一例です

最初の関数 - 配列として変数pにアクセスできます。 2番目に - p - 空の配列だけです。しかし、もし私が渡された変数の型を変更したら - すべてうまくいくでしょう。

どうすればいいですか...私はマージ機能を指定する必要があります。そして、このソリューションの外観は素晴らしく、機能しません。

+0

あなたの問題を示す実行例を示してください。 – Volker

答えて

2

わかりませんが、これは両方の機能が期待通りに働いていることを示すプレーの例です。

https://play.golang.org/p/n5ch-Wqbil

おそらく、あなたは(多分マージからISSETを呼び出すような?)他の一つの機能を呼び出して、いくつかの問題に実行している場合@Games'答えはおそらくまだ適用されます。

EDITこの例では、私はあなたがおそらくやろうとしている考えるかを示します。 https://play.golang.org/p/CNEt-poKdNとうまくいくようですが(N^2時間のパフォーマンスがありますが)

+0

Magic ...私のラップトップでは繰り返すことはできません。挑戦し続ける。 –

+0

「私のラップトップでは再生できません」と言うと、それはどういう意味ですか?あなたのコード全体をプレイグラウンドに貼り付けて、あなたの質問にリンクすることはできますか? – sberry

+0

PointのAppend関数を作成すると、 'Points.Append(Point)'だけができますか? –

1

Pointsは、Pointsのインスタンスへの参照と言う必要があるためです。我々は*Points代わりのPointsを設定する方法

func (p *Points) Isset(ip Point) bool { 
    for _, i := range p { 
     if i.Hash == ip.Hash { 
      return true 
     } 
    } 
    return false 
} 

注意:あなたは、次のことで、これを行うことができます。これは、メソッドの呼び出し元であるPoints構造体のインスタンスを処理したいということを示しています。

+0

ああ待っていますが、この機能はうまくいきます。そして、*ポイントは動作しません。スライスのエイリアスとしてタイプを使用します。 マージは機能しません。 –

+0

@AlexandrButenkoがMergeの同じ変更が今すぐ動作するかどうかを確認してください。 –