如何过滤数组以确保它确实包含另一个数组的位置

时间:2016-09-16 15:24:24

标签: arrays swift swift3

我按以下方式过滤我的数组:

randomArray = randomArray.filter({m in m.x < firstArray[0].x && ConditionX})

我有另一个数组secondArray,其中包含randomArray中的元素。 我想在过滤器中添加另一个条件(在上面的代码中表示ConditionX),以从secondArray中移除randomArray中的所有位置

2 个答案:

答案 0 :(得分:1)

尽管不能确切地理解你在这里尝试做什么,但在基本数组过滤方面还是如此。

let array1 = ["a", "b", "c"]
let array2 = ["c", "d", "e"]
var array3 = array1.filter() { return !array2.contains($0) }

应该返回:

["a", "b"]

答案 1 :(得分:0)

struct MyStruct {
  var x: Int = 0

  init(_ x: Int) {
    self.x = x
  }
}

var randomArray = [MyStruct(1), MyStruct(2), MyStruct(3)]
var firstArray = [MyStruct(10)]
var secondArray = [MyStruct(1), MyStruct(2)]

func exist(_ item: MyStruct, in array: [MyStruct]) -> Bool {
  for i in array {
    if item.x == i.x {
      return true
    }
  }
  return false
}

func shouldInclude(_ item: MyStruct, basedOn array: [MyStruct]) -> Bool {
  return item.x < array[0].x
}

randomArray = randomArray.filter({ (item) -> Bool in
  return shouldInclude(item, basedOn:firstArray) && !exist(item, in:secondArray)
})

print(randomArray) // output: [MyStruct(x: 3)]