数组 – 从对象数组中删除匹配的项目?

数组 – 从对象数组中删除匹配的项目?,第1张

概述我有一个这样的对象数组: var myArr = [ MyObject(name: "Abc", description: "Lorem ipsum 1."), MyObject(name: "Def", description: "Lorem ipsum 2."), MyObject(name: "Xyz", description: "Lorem ipsum 3.")] 我知道我 我有一个这样的对象数组
var myArr = [  MyObject(name: "Abc",description: "Lorem ipsum 1."),MyObject(name: "Def",description: "Lorem ipsum 2."),MyObject(name: "Xyz",description: "Lorem ipsum 3.")]

我知道我可以找到匹配的项目,如下所示:

var temp = myArr.filter { 
myArr.removeAll { 
myArr = myArr.filter { 
extension Array {    mutating func removeIf(closure:(T -> Bool)) {        for (var ix = self.count - 1; ix >= 0; ix--) {            if closure(self[ix]) {                self.removeAtIndex(ix)            }        }    }}
.name != "Def" }
.name == "Def" } // Pseudo
.name == "Def" }.first

但是现在如何从原来的myArr中删除它?我希望filter.first能以某种方式返回一个索引,所以我可以使用removeAtIndex.或者更好的是,我想做这样的事情:

myArr.removeIf {.name == "Def"}

有任何想法吗?

你不了解的是Array是一个结构,因此是一个值类型.它不能像类实例一样进行变异.因此,即使扩展Array以编写变异的removeIf方法,您也将始终在幕后创建一个新数组.

因此,使用过滤器和闭包条件的逻辑否定因素没有缺点或缺乏一般性:

例如,您可以像这样编写removeIf:

然后你可以像这样使用它:

但事实上,这对你的时间来说是一个很大的浪费.你在这里没有做过滤器还没有做的事情.从myArr.removeIf语法中可能看出你正在改变myArr,但你不是;你用另一个数组替换它.实际上,在该循环中每次调用removeAtIndex都会创建另一个数组!所以你不妨使用过滤器并且开心.

总结

以上是内存溢出为你收集整理的数组 – 从对象数组中删除匹配的项目?全部内容,希望文章能够帮你解决数组 – 从对象数组中删除匹配的项目?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1089944.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存