LoginSignup
4
2

More than 5 years have passed since last update.

【Swift3】配列同士の足し算、引き算

Last updated at Posted at 2017-05-24

足し算

  • 普通に足す
let array1 = ["a","b","c","d"]  
let array2 = ["b","c","e"] 

print(array1 + array2)
// ["a", "b", "c", "d", "b", "c","e"]
  • 重複を省いて足す
let array1 = ["a","b","c","d"]
let array2 = ["b","c","e"]

//重複を省いて、array1 + array2 をするメソッド

func addArrays(array1: [String],array2: [String]) -> [String] {
    var resultArray = array1
    let addArray = array2

    addArray.forEach { (li) in
        if array1.index(of: li) == nil {
            resultArray.append(li)
        }
    }

    return resultArray
}

print(addArrays(array1: array1, array2: array2))
//["a", "b", "c", "d", "e"]

※2017年05月26日追記

重複をさせたくないだけなら、こんな方法もありました

let array1 = ["a","b","c","d"]
let array2 = ["b","c","e"]
let values = array1 + array2

let orderedSet = NSOrderedSet(array: values)
let uniqueValues = orderedSet.array as! [String]

print(uniqueValues)
//["a", "b", "c", "d", "e"]

参考サイト:【Swift】配列内で重複する要素を除去する

引き算

let array1 = ["a","b","c","d"]  //引かれる配列
let array2 = ["b","c"]          //引く配列


//array1 - array2 をするメソッド

func subtractionArrays(array1: [String],array2: [String]) -> [String] {
    var resultArray = array1
    let subArray = array2
    subArray.forEach { (a) in
        if resultArray.index(of: a) != nil {
            resultArray.remove(at: resultArray.index(of: a)!)
        }
    }
    return resultArray
}

print(subtractionArrays(array1: array1, array2: array2))
// ["a","d"]

足し算は直感的にできますが、引き算は少し難しいですね(汗

※2017年05月26日追記

@hmhmsh さんと @elzup さんにコメントを頂きました

  • setを使う方法
let array1 = ["a","b","c","d"]
let array2 = ["b","c","e"]

//重複を省いて、array1 + array2 をするメソッド

func addArrays(array1: [String],array2: [String]) -> [String] {
    return Array(Set(array1 + array2))
}

print(addArrays(array1: array1, array2: array2))
//["b", "e", "a", "d", "c"]


//sorted()をかけるとアルファベット順にしてくれる
print(addArrays(array1: array1, array2: array2).sorted())
//["a", "b", "c", "d", "e"]
  • filterを使う方法
let array1 = ["a","b","c","d"]  //引かれる配列
let array2 = ["b","c"]          //引く配列

let res = array1.filter { v in return !array2.contains(v) }
print(res)
// "["a", "d"]\n"

以上になります。コメントしてくださった方、ありがとうございました!

4
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2