删除数组内部的项目,该数组是字典 Swift 2 中的值

2023-12-10

我知道以前可能已经回答过这个问题,但是当我搜索时我找不到任何东西。

所以我有一本看起来像这样的字典:

var dict = [String:[String]]()

我想要做的是删除数组内的某个索引(字典的值)。假设我想从此代码中删除字符串“Chair”:

dict = ["Furniture": ["Table", "Chair", "Bed"], "Food": ["Pancakes"]]

如果这个问题已经得到回答,再次抱歉。


许多涉及字典条目突变的答案往往集中在remove值 -> 改变值 -> 替换值习语,但请注意,删除不是必需的。您同样可以使用例如执行就地突变可选链接

dict["Furniture"]?.removeAtIndex(1)

print(dict)
    /* ["Furniture": ["Table", "Bed"], 
        "Food": ["Pancakes"]]          */

但请注意,使用.removeAtIndex(...)解决方案并不完全安全,除非您执行数组边界检查,确保我们尝试删除元素的索引确实存在。

作为安全的就地突变替代方案,请使用where可选绑定语句的子句,用于检查我们要删除的索引是否超出范围

let removeElementAtIndex = 1
if let idxs = dict["Furniture"]?.indices where removeElementAtIndex < idxs.endIndex {
    dict["Furniture"]?.removeAtIndex(removeElementAtIndex)
}

另一种安全的选择是利用advancedBy(_:limit)获得一个安全的索引来使用removeAtIndex(...).

let removeElementAtIndex = 1
if let idxs = dict["Furniture"]?.indices {
    dict["Furniture"]?.removeAtIndex(
        idxs.startIndex.advancedBy(removeElementAtIndex, limit: idxs.endIndex))
}  

最后,如果使用删除/变异/替换习语,另一个安全的选择是使用flatMap对于变异步骤,删除给定索引的元素(如果该索引存在于数组中)。例如,对于通用方法(和where滥用条款:)

func removeSubArrayElementInDict<T: Hashable, U>(inout dict: [T:[U]], forKey: T, atIndex: Int) {
    guard let value: [U] = dict[forKey] where
        { () -> Bool in dict[forKey] = value
            .enumerate().flatMap{ $0 != atIndex ? $1 : nil }
            return true }()
        else { print("Invalid key"); return }
}

/* Example usage */
var dict = [String:[String]]()
dict = ["Furniture": ["Table", "Chair", "Bed"], "Food": ["Pancakes"]]

removeSubArrayElementInDict(&dict, forKey: "Furniture", atIndex: 1)

print(dict)
    /* ["Furniture": ["Table", "Bed"], 
        "Food": ["Pancakes"]]          */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除数组内部的项目,该数组是字典 Swift 2 中的值 的相关文章

  • 分块解密媒体文件并通过 AVPlayer 播放

    我有一个mp4 video file我是谁encrypting保存并decrypting通过 AVPlayer 播放 Using CRYPTOSWIFT Library for encrypting decrypting 当我一次解密整个文
  • swift 2.0 之后的 CGBitmapInfo alpha 掩码

    我正在使用这个 github 存储库中的库https github com Haneke HanekeSwift https github com Haneke HanekeSwift缓存从服务器下载的图像 更新到 swift 2 0 后
  • 如何使用 Swift 在 stderr 上打印?

    我在 Linux 上使用 Swift 2 2 需要在标准错误流上编写一些调试输出 目前 我正在执行以下操作 import Foundation public struct StderrOutputStream OutputStreamTyp
  • SpriteKit 中的水平滚动(与视图控制器相比)

    我对解决这个问题的正确方法有点困惑 在我的游戏中 我允许玩家从 5 个区域中进行选择 区域只不过是屏幕上的一个矩形 其中包含该区域的完成百分比 整个列表居中 看起来不错 最终会有更多区域 但我不希望它们位于多行上 我希望玩家滑动以滚动它们
  • 如何快速发送自动短信? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在我的应用程序中自动发送短信 我怎样才能快速做到这一点 我使用 MFMessageComposeViewController 发送
  • UIImageView 的触摸向上和触摸向下操作

    我想要实现的是 当用户触摸 UIImageView 时设置 Image1 当用户抬起手指时设置 Image2 我只能用此代码获取 UIGestureRecognizerState Ended var tap UITapGestureReco
  • Swift 2 错误处理和 while

    例如下面的代码 while let data Provider getData 使用 Swift 2 你会遇到两个错误 条件绑定的初始化程序必须具有可选类型 而不是 字符串 调用可以抛出 但它没有标记为 try 并且错误不会被处理 在这里进
  • 使用 Swift 2 进行 Base64 编码/解码

    我的代码在 Xcode 6 4 和 Swift 1 2 上运行良好 var imageData UIImageJPEGRepresentation firstImageView image 0 2 let base64String imag
  • Xcode 7 库搜索路径警告

    这是它显示的警告 找不到选项 F Applications Xcode beta app Contents Developer Platforms iPhoneOS platform Developer SDKs iPhoneOS9 0 s
  • 为什么 Swift 中委托方法需要公开?

    我正在快速开发一个框架 我正在创建一个处理框架中 BLE 内容的类 这个类应该是公共的 因为我需要从使用我的框架的外部应用程序访问这个类 我的班级结构如下 public class MyClass NSObject CBCentralMan
  • 循环核心数据 NSSet 的正确语法

    每当我循环遍历核心数据关系 NSSet 时 我必须将集合转换为数组 for student in classroom students allObjects as Student print student name 或者我可以正常循环遍历
  • 在 iOS 框架中嵌入框架

    我有一个包含另一个目标 框架 的项目 它是主项目的依赖项 该框架需要它自己的框架 因此我使用 carthage 添加了它们 该项目在模拟器上编译并运行良好 但是在物理设备上运行时出现以下错误 dyld Library not loaded
  • Swift 2:IBOutlet 集合 [UIButton]!内存泄漏

    最近在我的应用程序中 我发现我的 UIButton 出口集合正在泄漏内存 我所拥有的只是 IBOutlet var TabBarButtons UIButton And from Instrument 谁能告诉我出了什么问题吗 随着时间的推
  • 电话号码的 Swift 2 国家/地区代码

    我正在尝试从 iPhone 用户处获取国家 地区代码 我不确定是否有有关该国家 地区以及某些应用程序 如 Viber 如何建议拨号代码的信息 我到目前为止 let currentLocale NSLocale currentLocale l
  • 使用prepareForSegue传递数据

    我试图将数据从viewController 1传递到viewController2 我有2个按钮和1个segue 因此有一个segue标识符 这2个按钮 按下时每个按钮应显示 1个标签用于显示标题 1个textView用于显示定义 我很难显
  • AVPlayer 不播放音频 - iOS 9,目标 - C

    我正在尝试从我的应用程序中的 URL 播放音频 iOS 8 中一切都按预期发生 模拟器和物理设备 对于 iOS 9 它可以在模拟器中运行 但在设备上 音频根本无法播放 出现流媒体 如果我单击播放 进度条还显示音频正在加载并播放 但没有声音
  • 为什么在授予用户权限时,UIUserNotificationType.None 在当前设置中返回 true?

    我正在编写一种方法来检查当前用户设置是否包含某些通知类型 当检查当前设置是否包含 UIUserNotificationsType None 时 无论授予权限还是拒绝权限 它都会返回 true 有谁知道这是为什么吗 func register
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum

随机推荐

  • 安全性:tcl 中的会话标识符未更新

    我正在开发开源应用程序 项目 开放 在扫描过程中我发现了以下漏洞 Medium Session Identifier Not Updated Issue 13800882 Severity Medium URL https
  • 如何在 mysql 查询的“IN”子句中使用 PHP 中的值数组?

    get all id s of ur friend that has installed your application friend pics facebook gt api array method gt fql query quer
  • Next.js getServerSideProps 始终未定义

    我已经开始使用新的 Next 应用程序 并尽可能使用功能组件而不是基于类的组件 继文档 我设置了以下内容但没有运气 import React from react import GetServerSideProps InferGetServ
  • ui grid 将更新的单元格数据保存到数据库

    我正在研究 ui 网格编辑单元格功能 我需要使用 REST API 将编辑后的单元格值更新到数据库 另外 我如何获取控制器中选择的行列表 我的工作代码 var app angular module app ngTouch ui grid u
  • 使用JNA加载多个依赖库

    JNA中有没有办法用Java加载多个依赖库 我通常使用Native loadLibrary 加载一个 DLL 但我猜它不会以这种方式工作 因为我将此函数调用分配给实例成员 假设我有图书馆foo和图书馆bar bar依赖于foo 它也依赖于b
  • 多数独人工智能方法

    我正在概念化一个求解器的变体sudoku called 多重数独 其中多个板重叠 如下所示 如果我正确理解游戏 那么您必须以这样的方式解决每个网格 即任何两个或多个网格之间的重叠都是每个网格解决方案的一部分 我不确定我应该如何思考这个问题
  • 为什么 IntelliJ 的 Java 编辑器中添加灰色的 var:colon

    我安装了IntelliJ 2016 3 2 构建 IC 163 10154 41 建于2016年12月21日 灰色的 var colon 会自动添加到 Java 编辑器中调用方方法的参数前面 如下所示 添加灰色的 a b 为什么会发生这种情
  • 通过 Cordova config.xml 将条目添加到 iOS .plist 文件

    我是 Cordova CLI 的新手 我需要通过 Cordova 以编程方式执行以下步骤 在项目 plist中添加一个新行 在新行中输入以下值 Key GD库模式Type 字符串 默认 Value GD企业模拟 我想我需要在项目根目录下的
  • flink 中的 Kafka 消费者

    我正在使用 kafka 和 apache flink 我正在尝试使用 apache flink 中的 kafka 主题的记录 采用 avro 格式 下面是我正在尝试使用的代码片段 使用自定义反序列化器对主题中的 avro 记录进行反序列化
  • CSS :focus 在 iOS 中不起作用

    我有一个盒子 里面有一张图片 在悬停 聚焦时 我希望颜色叠加和标题淡入其上 除了 iOS 设备外 它几乎可以在所有浏览器和设备上完美运行 我同时使用 hover 和 focus 伪类来适应各种设备 但它似乎对 iOS 没有帮助 当您将鼠标悬
  • Firebase 消息传递主题超出配额

    我在尝试发送推送时收到错误 超出主题配额 我认为 Firebase 云消息传递没有限制 我做错了什么 据我所知 没有任何限制 一次可以达到1000 但如果你已经结束了 那么火力点将需要更多时间才能发送给每个人 即使你使用自己的服务器发送推送
  • Android Studio 的 git commit 没有看到我修改的文件

    我更熟悉在命令行 尤其是 MacOS 上使用 git 但是 我有时会尝试使用 Android Studio VCS 提交 因为它有时使用起来稍快一些 我今天遇到的奇怪问题是Android的Studio git commit 看不到我的4个修
  • 如何在 javascript/es6 中导入两个同名的类?

    我的文件中有这两个导入语句 import Data from component Data js import Data from actions Data js 这两个文件都包含一个名为Data 我如何指定哪个是哪个 如何避免名字冲突 想
  • 3D 最小二乘平面

    给定一组 3D 数据点 计算 x y z 空间中的最小二乘平面的算法是什么 换句话说 如果我有一堆点 例如 1 2 3 4 5 6 7 8 9 等 那么如何计算最佳拟合平面 f x y ax by c 从一组 3D 点中获取 a b 和 c
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 从Python中的连续列表中识别连续数字组

    python中从n个连续列表中选取多个n个连续整数 从每个列表中选取一个整数 的最有效方法是什么 这里 n 相当大 比如说 100 的数量级 L1 5 3 2 7 1 L2 3 5 6 8 9 21 2 L3 5 3 6 7 3 9 我想从
  • `正则表达式{n,}?` == `正则表达式{n}`?

    编辑 注意 在 的最后 2 我发现你可以写 2 是不是和下面的完全一样 2 No 2 表示两次或以上 2 means exactly两次 量词默认是贪婪的 所以给定字符串foo你会得到foo如果你使用 2 but fo如果你使用 2 因为你
  • Android 从 Gmail 应用程序获取附加文件名

    我必须从 Gmail 应用程序中检索内容的文件名 我得到的内容 uri 类似于 内容 gmail ls messages mymailid 40gmail com 4 attachments 0 1 BEST false 我看到一些应用程序
  • 在 Catalyst 控制器中处理可选 url 参数的最佳方法是什么?

    例如 我知道怎么搭配www domain com foo 21 sub foo Path foo Args 1 my self c foo id do stuff with foo 但我怎样才能匹配www domain com foo 21
  • 删除数组内部的项目,该数组是字典 Swift 2 中的值

    我知道以前可能已经回答过这个问题 但是当我搜索时我找不到任何东西 所以我有一本看起来像这样的字典 var dict String String 我想要做的是删除数组内的某个索引 字典的值 假设我想从此代码中删除字符串 Chair dict