implement proc `==` and `contains` for you specialized type
import sequtils
type
DataBuffer* = tuple
key : string
mytype : string
value : string
proc `==`(a, b: DataBuffer): bool =
a.key == b.key
proc contains[T: DataBuffer](d: T, dbuf: seq[T]): bool =
for data in dbuf:
if d == data:
return true
false
# change proc to be different to work with generic add
proc dataAdd[T: DataBuffer](data: var seq[T], newdata: T): bool
{.discardable.} =
if newdata in data:
data[data.find(newdata)] = newdata
false
else:
data.add newdata
true
var mydata = newSeq[DataBuffer]()
mydata.dataAdd(("a","int","4"))
mydata.dataAdd(("a","int","5"))
echo mydata # if expect only the last add to be visible ([a, int, 5])
With boolean return, you can know whether it replaced old value or add new to
collections. You can just change the dataAdd to return DataBuffer so it will
return old value that's be replaced or return a newly added value.