移除Swift数组中最后一个出现的元素

9 浏览
0 Comments

移除Swift数组中最后一个出现的元素

我需要移除一个 [Bool] 数组中特定元素的最后一次出现。例如在 JavaScript 中,可以这样做:\n

var k = [true, true, false];
k.splice(k.lastIndexOf(true), 1);
==> [true, false]

\n在 Swift 中,我该如何实现相同的行为?

0
0 Comments

从上述内容中可以看出,问题的原因是Swift数组没有内置的函数来删除数组中最后一次出现的元素。因此,需要通过遍历数组来查找最后一次出现的元素,并将其索引保存在一个变量中,然后使用该索引从数组中移除该元素。

解决方法是使用一个变量removeIndex来保存最后一次出现的元素的索引。通过遍历数组,如果找到了与搜索元素相等的元素,就将其索引赋值给removeIndex。最后,使用可选绑定(optional binding)来判断removeIndex是否有值,如果有值,则使用removeAtIndex方法从数组中移除该元素。

另外,还提到了优化的方法。可以只保存最后一次匹配的索引值,然后直接从数组中移除该索引对应的元素,这样可以减少存储空间并简化代码。

在最后的优化中,还提到了使用可选绑定的方式来简化代码。使用可选绑定将可选类型转换为相同类型的非可选类型。可以为非可选版本使用一个新的常量名,或者如果使用相同的常量名,则在"if let"语句的大括号范围内创建一个新的非可选常量,并且无法从大括号范围内访问可选常量。

需要注意的是,在Swift 2.0中,需要将arr.enumerate()替换为arr.enumerated()来进行遍历。

要从Swift数组中移除最后一次出现的元素,可以使用遍历数组并保存最后一次匹配的索引值的方法,也可以直接从数组中移除该索引对应的元素的方法,同时还可以使用可选绑定来简化代码。

0
0 Comments

Xcode 8.2 • Swift 3.0.2

问题:如何在Swift数组中移除最后一个出现的元素?

解决方法:

在Swift中,要移除数组中最后一个出现的元素,可以通过创建一个Array的扩展(extension)来实现。首先需要给Array添加约束,要求数组的元素类型是可比较的(Equatable)。然后定义两个方法,分别是lastIndex(of:)和removeLastOccurrence(of:)。

其中,lastIndex(of:)方法返回指定值在集合中最后一次出现的索引。通过将数组进行反转(reversed()),然后使用index(of:)方法来查找元素的索引位置。最后通过减一操作(index.base - 1)来获取最后一个出现的索引。

removeLastOccurrence(of:)方法是移除最后一个出现的指定值。首先通过调用lastIndex(of:)方法来获取最后一个出现的索引,然后使用remove(at:)方法来移除元素。如果找到了最后一个出现的元素并移除成功,则返回true;否则返回false。

下面是具体实现的代码:

extension Array where Element: Equatable {

/// Returns the last index where the specified value appears in the collection.

/// After using lastIndex(of:) to find the last position of a particular element in a collection, you can use it to access the element by subscripting.

/// - Parameter element: The element to find the last Index

func lastIndex(of element: Element) -> Index? {

if let index = reversed().index(of: element) {

return index.base - 1

}

return nil

}

/// Removes the last occurrence where the specified value appears in the collection.

/// - Returns: True if the last occurrence element was found and removed or false if not.

/// - Parameter element: The element to remove the last occurrence.

mutating func removeLastOccurrence(of element: Element) -> Bool {

if let index = lastIndex(of: element) {

remove(at: index)

return true

}

return false

}

}

使用Playground进行测试:

var k = [true, true, true, false, true, false]

k.removeLastOccurrence(of: true)

print(k) // "[true, true, true, false, false]"

通过上述代码,我们可以看到最后一个出现的true元素被成功移除,数组的结果为[true, true, true, false, false]。

0
0 Comments

在Swift数组中,有时候我们需要移除数组中最后一次出现的元素。下面的代码可以帮助我们实现这个功能:

for i in array.indices.reversed() where array[i] == searchValue {

array.remove(at: i)

break

}

这段代码通过反向遍历数组的索引,找到数组中最后一次出现的目标元素,然后使用`remove(at: i)`方法将其从数组中移除,并通过`break`语句退出循环。

这个解决方法非常简洁高效,非常适合在Swift中实现移除数组中最后一次出现的元素的功能。

感谢提供这个问题的用户,他迅速回答并解释了我的问题。

另外,对于Swift 3和4,稍作修改即可使用这个方法。`reverse()`方法已经改为了`reversed()`,`removeAtIndex(i)`方法已经改为了`remove(at: i)`。

同时,还有一位用户提供了一个很好的建议,即使用`array.indices.reverse()`代替`(0..

非常感谢这位用户提供的建议,我已经将其合并到了答案中。

总结一下,通过反向遍历数组的索引,我们可以很方便地找到并移除数组中最后一次出现的元素,这对于Swift中的数组操作非常有用。

0