[arrays] Swift에서 배열에서 요소를 제거하는 방법

Apple의 새로운 언어 Swift에서 배열에서 요소를 설정 해제 / 제거하려면 어떻게해야합니까?

코드는 다음과 같습니다.

let animals = ["cats", "dogs", "chimps", "moose"]

animals[2]배열에서 요소를 어떻게 제거 할 수 있습니까?



답변

let키워드는 변경할 수없는 상수를 선언하는 것입니다. 변수를 수정하려면 var대신 다음을 사용해야 합니다.

var animals = ["cats", "dogs", "chimps", "moose"]

animals.remove(at: 2)  //["cats", "dogs", "moose"]

원본 컬렉션을 변경하지 않고 변경하지 않는 대안은 filter다음과 같이 제거하려는 요소없이 새 컬렉션을 만드는 것입니다.

let pets = animals.filter { $0 != "chimps" }


답변

주어진

var animals = ["cats", "dogs", "chimps", "moose"]

첫 번째 요소 제거

animals.removeFirst() // "cats"
print(animals)        // ["dogs", "chimps", "moose"]

마지막 요소 제거

animals.removeLast() // "moose"
print(animals)       // ["cats", "dogs", "chimps"]

색인에서 요소 제거

animals.remove(at: 2) // "chimps"
print(animals)           // ["cats", "dogs", "moose"]

알 수없는 색인의 요소 제거

하나의 요소 만

if let index = animals.firstIndex(of: "chimps") {
    animals.remove(at: index)
}
print(animals) // ["cats", "dogs", "moose"]

여러 요소

var animals = ["cats", "dogs", "chimps", "moose", "chimps"]

animals = animals.filter(){$0 != "chimps"}
print(animals) // ["cats", "dogs", "moose"]

노트

  • 위의 메소드는 배열을 제자리에서 수정하고 (제외 filter) 제거 된 요소를 반환합니다.
  • 맵 필터 감소에 대한 신속한 가이드
  • 원래 배열을 수정하지 않으려면 dropFirst또는 dropLast새 배열을 사용 하거나 만들 수 있습니다 .

스위프트 5.2로 업데이트


답변

위의 답변은 삭제하려는 요소의 색인을 알고 있다고 가정합니다.

종종 배열에서 삭제하려는 객체에 대한 참조 를 알고 있습니다. (예를 들어 배열을 반복하고 찾아낸 경우 등) 이러한 경우 인덱스를 어디서나 전달하지 않고도 객체 참조로 직접 작업하는 것이 더 쉬울 수 있습니다. 따라서이 솔루션을 제안합니다. 그것은 사용 신원 연산자 !== 는 두 개의 객체 참조가 모두 동일한 개체의 인스턴스를 참조하는지 여부를 테스트에 사용합니다.

func delete(element: String) {
    list = list.filter() { $0 !== element }
}

물론 이것은 단지 Strings를 위해 작동하지 않습니다 .


답변

스위프트 5 :
필터링없이 배열에서 요소를 제거하는 시원하고 쉬운 확장입니다.

   extension Array where Element: Equatable {

    // Remove first collection element that is equal to the given `object`:
    mutating func remove(object: Element) {
        guard let index = firstIndex(of: object) else {return}
        remove(at: index)
    }

}

사용법 :

var myArray = ["cat", "barbecue", "pancake", "frog"]
let objectToRemove = "cat"

myArray.remove(object: objectToRemove) // ["barbecue", "pancake", "frog"]

또한 일반적인 유형 Int이므로 다른 유형과도 작동 Element합니다.

var myArray = [4, 8, 17, 6, 2]
let objectToRemove = 17

myArray.remove(object: objectToRemove) // [4, 8, 6, 2]


답변

Swift4의 경우 :

list = list.filter{$0 != "your Value"}


답변

Xcode 10+부터 WWDC 2018 세션 223, “Embracing Algorithms” 에 따르면 앞으로 좋은 방법은 다음과 같습니다.mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows

애플의 예 :

var phrase = "The rain in Spain stays mainly in the plain."
let vowels: Set<Character> = ["a", "e", "i", "o", "u"]

phrase.removeAll(where: { vowels.contains($0) })
// phrase == "Th rn n Spn stys mnly n th pln."

Apple의 설명서를 참조하십시오

OP의 예에서, 동물을 제거하는 것 [2], “침팬지”:

var animals = ["cats", "dogs", "chimps", "moose"]
animals.removeAll(where: { $0 == "chimps" } )
// or animals.removeAll { $0 == "chimps" }

이 방법은 확장 성이 좋고 (선형 대 2 차) 읽기 쉽고 깨끗하기 때문에 선호 될 수 있습니다. Xcode 10 이상에서만 작동하며 작성 당시 베타 버전입니다.


답변

스위프트의 어레이와 관련된 몇 가지 작업

배열 만들기

var stringArray = ["One", "Two", "Three", "Four"]

배열에 객체 추가

stringArray = stringArray + ["Five"]

Index 객체에서 값 가져 오기

let x = stringArray[1]

개체 추가

stringArray.append("At last position")

인덱스에 객체 삽입

stringArray.insert("Going", atIndex: 1)

객체 제거

stringArray.removeAtIndex(3)

연결 객체 값

var string = "Concate Two object of Array \(stringArray[1]) + \(stringArray[2])"