【发布时间】:2012-03-04 07:21:41
【问题描述】:
有没有办法检查切片/映射是否存在值?
如果切片中确实存在不,我想为切片添加一个值仅 .
这可行,但看起来很冗长。有没有更好的方法来做到这一点?
orgSlice := []int{1, 2, 3}
newSlice := []int{}
newInt := 2
newSlice = append(newSlice, newInt)
for _, v := range orgSlice {
if v != newInt {
newSlice = append(newSlice, v)
}
}
newSlice == [2 1 3]
【问题讨论】:
-
Re:EDIT - 任何有效的地图键类型都是一样的 - 字符串是。
-
Re:EDIT2 - 如果 'newSlice' 中值的顺序无关紧要,并且将使用范围语句使用/使用它,那么它的构造是多余的 - 只需范围 'set' 的键.
-
@jnml 感谢您的 cmets。我将
ints的列表存储在GAE 数据存储中,并且为了查询它必须是一个切片([]int)。这个要求是否使我的初始技术成为更好的选择?列表会很小。 -
您可以通过首先创建
newslice := make([]int, len(set))来避免使用append()(以及所有重新分配)。如果你做了很多这样的“包含关键......”测试(至少超过 2 个),将切片转换为 map[int]struct{} 可能会快得多,如果你只做几个,循环直接通过切片可能更好。 -
@tux21b 好的,谢谢,非常感谢您花时间解释所有这些。