Không có cách nào dễ dàng để loại bỏ một phần tử cụ thể khỏi một mảng, nếu nó bằng một chuỗi đã cho? Cách giải quyết là tìm chỉ mục của phần tử của mảng mà bạn muốn loại bỏ, sau đó removeAtIndex
hoặc tạo một mảng mới nơi bạn chắp thêm tất cả các phần tử không bằng chuỗi đã cho. Nhưng không có cách nào nhanh hơn?Xóa phần tử mảng cụ thể, bằng với chuỗi - Swift
Trả lời
Bạn có thể sử dụng bộ lọc() để lọc mảng của bạn như sau
var myArrayOfStrings = ["Hello","Playground","World"]
myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"}
print(myArrayOfStrings) // "[Playground, World]"
Nó không rõ ràng nếu bằng nhanh hơn bạn có ý nghĩa về mặt thời gian thực hiện hoặc số lượng mã.
Trong trường hợp thứ hai, bạn có thể dễ dàng tạo bản sao bằng phương thức filter
. Ví dụ, với các mảng sau:
let array = ["1", "2", "3", "4", "5"]
bạn có thể tạo một bản sao với tất cả các yếu tố nhưng "2" như:
let filteredArray = array.filter { $0 != "2" }
Hahaha chúng tôi hoàn toàn đồng bộ nhưng tôi đã nhanh hơn 7 giây. :) –
@LeonardoSavioDabus: Haha, vâng, nhưng tôi đã bị gián đoạn bởi vợ tôi hỏi tôi khi viết câu trả lời ... vì vậy tôi đã thắng ;-) – Antonio
kkkkkk Tôi biết chính xác ý bạn là :) –
Bạn sẽ muốn sử dụng filter()
. Nếu bạn có một phần tử đơn lẻ (gọi là obj
) để xóa, thì vị từ filter()
sẽ là { $0 != obj }
. Nếu bạn làm điều này nhiều lần cho một mảng lớn thì đây có thể là vấn đề về hiệu suất. Nếu bạn có thể trì hoãn việc loại bỏ đối tượng cá nhân và muốn xóa toàn bộ tiểu mảng sau đó sử dụng một cái gì đó như:
var stringsToRemove : [String] = ...
var strings : [String] = ...
strings.filter { !contains(stringsToRemove, $0) }
ví dụ:
1> ["a", "b", "c", "d"].filter { !contains(["b", "c"], $0) }
$R5: [String] = 2 values {
[0] = "a"
[1] = "d"
}
Bạn có thể sử dụng bộ lọc() kết hợp với nhà điều hành quá tải để tạo ra một giải pháp dễ dàng lặp lại:
func -= (inout left: [String], right: String){
left = left.filter{$0 != right}
}
var myArrayOfStrings:[String] = ["Hello","Playground","World"]
myArrayOfStrings -= "Hello"
print(myArrayOfStrings) // "[Playground, World]"
nếu bạn cần phải xoá subarray từ mảng thì đây là một giải pháp hoàn hảo sử dụng Swift3:
var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
let subArrayToDelete = ["c", "d", "e", "ee"]
array = array.filter{ !subArrayToDelete.contains($0) }
print(array) // ["a", "b", "f", "g", "h", "i", "j"]
này là tốt hơn cho hiệu suất của bạn chứ không phải xóa từng cái một.
btw thậm chí nhanh giải pháp là (nhưng nó sẽ sắp xếp lại các mục trong mảng thức):
array = Array(Set(array).subtracting(subArrayToDelete))
Sử dụng bộ lọc như gợi ý ở trên là tốt đẹp. Nhưng nếu bạn muốn xóa chỉ một lần xuất hiện của một giá trị hoặc bạn cho rằng không có bản sao nào trong mảng và bạn muốn có thuật toán nhanh hơn, hãy sử dụng thuật toán này (trong Swift3):
if let index = array.index(of: "stringToRemove") {
array.remove(at: index)
} else {
// not found
}
loại bỏ là một phương pháp đột biến không cần phải gán lại nó cho mảng. 'array.remove (at: index)' –
Bạn nói đúng, tôi đã sửa nó. –
- 1. Cách xóa các phần tử cụ thể trong một mảng có nhiều mảng
- 2. Chuỗi thành mảng rồi xóa phần tử cuối
- 3. Xóa một chuỗi cụ thể với tr
- 4. jQuery Xóa văn bản cụ thể khỏi một phần tử
- 5. Lấy phần tử cụ thể từ mỗi mảng phụ
- 6. chuỗi với một chuỗi mảng - Swift
- 7. Xóa các phần tử khỏi mảng Ruby
- 8. Xóa phần tử null khỏi mảng mongo
- 9. PHP | Xóa phần tử khỏi mảng với sắp xếp lại?
- 10. Thay đổi tất cả các phần tử mảng bao gồm một chuỗi cụ thể
- 11. Xóa các mục cụ thể khỏi mảng bằng MongoDB
- 12. Xóa các phần tử trống khỏi một mảng trong Python
- 13. Xóa phần tử n đầu tiên khỏi mảng Int trong Swift
- 14. Sắp xếp mảng bằng Python mà không sửa đổi các vị trí phần tử cụ thể
- 15. Đặt phần tử mảng NumPy bằng không nếu chúng nằm dưới một ngưỡng cụ thể
- 16. Xóa các phần tử mảng trống bằng mảng_filter với hàm gọi lại
- 17. Mảng mảng theo phần tử
- 18. Xóa phần tử từ json bằng php
- 19. Sử dụng đường dây để xóa phần tử từ mảng
- 20. Xóa các phần tử cụ thể trong tiêu chuẩn std :: map
- 21. Jquery lấy phần tử chứa phần tử con với giá trị html cụ thể
- 22. xóa MỘT phần tử mảng theo giá trị trong ruby
- 23. Cách thay thế các phần tử trong mảng bằng các phần tử của mảng khác
- 24. Xóa phần tử khỏi mảng, sử dụng slice
- 25. Xóa phần tử khỏi mảng đa chiều dựa trên khóa
- 26. xoá phần tử đầu tiên khỏi mảng
- 27. Xóa các phần tử rỗng khỏi Vector chuỗi
- 28. Xóa phần tử mảng trong vòng lặp foreach
- 29. Xóa phần tử của một mảng thông thường
- 30. Cách lấy các phần tử XML cụ thể với giá trị thuộc tính cụ thể?
Bạn đã xem các phương pháp trong Tham chiếu lớp NSMutableArray, như removeObject :, hoặc removeObjectIdenticalTo :? – rdelmar
Tôi đang sử dụng nhanh chóng, và cách tôi tìm hiểu những gì tôi có thể làm với một mảng, là đặt một dấu chấm sau tên của nó và xem các tùy chọn xcode gợi ý, chúng bao gồm removeAll, removeAtIndex, removeLast và removeRange. Tôi không thể thấy bất kỳ tham chiếu nào tới removeObjectIdenticalTo. – TimWhiting
Câu hỏi của bạn không chỉ rõ bạn đang đề cập đến một Swift Array hay một NSMutableArray; bạn có thể sử dụng ether trong Swift.Nếu bạn đang lập trình trong Swift, bạn sẽ không thấy các đề xuất NSMutableArray trừ khi bạn đưa mảng của mình vào NSMutableArray – rdelmar