2017-10-11 2 views
1

私は、golangクライアントを使用して、aerospikeでリストデータ型(http://www.aerospike.com/docs/guide/cdt-list.html)を使用しています。 ListInsertOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListInsertOp)を使用して、指定したエントリのリストに値を挿入できます。golangを使用してaerospikeでリストを反復する方法は?

はしかし、私は更新/これを行うためにはListSetOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListSetOp)またはListRemoveOp(https://godoc.org/github.com/aerospike/aerospike-client-go#ListRemoveOp

を使用して、指定されたリスト値を削除したい、私は、インデックスを必要としています。このインデックスはどのように入手できますか?すべてのリスト値を繰り返し処理してインデックスを取得し、更新または削除操作を実行する方法はありますか?

答えて

2

Listというリストがあるとします。 私たちは、あなたがそのような操作を行うことができますnewItemvalueという要素を交換したいとしましょう:

上記のスニペットで
... 

for index, item := range List { 
    if item == value { 
      List[index] = newItem 
    } 
} 

... 

indexは要素itemが存在する位置のインデックスです。このようにして、リスト内の特定のインデックスにある要素をvalueに置き換えることもできます。遊び場で

サンプル例:いつものようhttps://play.golang.org/p/qOmsY9fbL2

+0

質問はGoのスライス内のアイテムを置き換えることではありません。 'ListSetOp'の背後にある考え方は、リスト全体を書き戻すことなく、リスト内の単一の項目を置き換えることです。 –

1

、リスト内の項目は、ゼロから始まる彼らの整数位置によってインデックス付けされます。 Aerospikeは、リストの最後から逆方向に開始するための負のインデックス付けもサポートしています。

Lists documentation in the Aerospike

要素は、整数位置によって順序付けられます。

Lists documentation in the Aerospike's Node.js client

リスト操作は、負のインデックス作成をサポートしています。インデックスが負の場合、解決されたインデックスはリストの最後から逆方向に開始します。

インデックス/レンジ例:

  • インデックス0:リストの最初の項目。
  • インデックス4:リストの5番目の項目。
  • インデックス-1:リスト内の最後のアイテム。
  • 索引-3:リストの最後から3番目の項目。

Go client sourceでも言及されている。

list := []string{“a”, “b”, “c”, “d”, “e”} 
bin := aerospike.NewBin("listbin", list) 
err := client.PutBins(nil, key, bin) 

// to replace “d”: 
op := aerospike.ListSetOp(bin.Name, 3, "replaced") 
_, err = client.Operate(nil, key, op) 
関連する問題