这是一种现成的解决方案。它不使用正则表达式,但也不使用任何 if/else 语句。它比生产价值更学术。
假设:您的字符串是以逗号分隔的标题列表,并且这些是唯一的集合(没有重复),并且该顺序无关紧要:
titles = Set.new(str.split(','))
#=> #<Set: {"admin", "artist", "location_manager", "event_manager"}>
titles_to_toggle = ["location_manager"]
#=> ["location_manager"]
titles ^= titles_to_toggle
#=> #<Set: {"admin", "artist", "event_manager"}>
titles ^= titles_to_toggle
#=> #<Set: {"location_manager", "admin", "artist", "event_manager"}>
titles.to_a.join(",")
#=> "location_manager,admin,artist,event_manager"
所有这些都假设您使用字符串作为一种集合。如果是这样,您可能应该只使用一组。如果不是,并且您实际上需要字符串操作函数来对其进行操作,那么除了使用 if-else 或变体(例如三元运算符 orunless
或 Bergi 的答案)之外,可能没有其他办法
同样值得注意的是,正则表达式是一种解决方案:确保您考虑了边缘情况。如果 'location_manager' 在字符串的中间,你会删除多余的逗号吗?如果逗号位于字符串的开头或结尾,您会正确处理它吗?添加逗号时您会正确添加逗号吗?由于这些原因,将集合视为集合或数组而不是字符串更有意义。