2017-10-11 63 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的列表。 讓我們說你要替換元素稱爲valuenewItem 你可以這樣做:

... 

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:列表中的第五項。
  • 索引-1:列表中的最後一項。
  • 索引-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)