如何获取具有与特定条件匹配的属性值的数组中的对象的索引?

时间:2015-06-30 12:22:58

标签: ios swift

也许这个问题之前已经得到了回答,或者答案是如此明显,但我一直在寻找几天,但找不到这个问题的答案。我很感激任何帮助,因为我在我的智慧结束。

class marker {
    var latitude = Double()
    var longitude = Double()
    var coordinate = CLLocationCoordinate2DMake(latitude, longitude)
}

let someCoordinate = CLLocationCoordinate2DMake(someLatitude, someLongitude)

现在假设我有一个名为“markers”的数组,其中包含10个标记对象,所有属性都已初始化。如何找到坐标值与someCoordinate的值匹配的标记项的索引?

修改

在尝试下面iosdk的建议时,我发现我正在尝试比较作为CLLocationCoordinate2D的marker.coordinate属性。这没有像我预期的那样奏效。相反,我试过这个并且它有效:

let markerIndex = indexOfMarker(markers) { $0.position.latitude == latitude && $0.position.longitude == longitude }

1 个答案:

答案 0 :(得分:2)

struct SomeStruct {
  let a, b: Int
}

let one = SomeStruct(a: 1, b: 1)
let two = SomeStruct(a: 2, b: 2)
let three = SomeStruct(a: 3, b: 3)

let ar = [one, two, three]

let ans = ar.indexOf { $0.a == 2 } // 1?

或者,在Swift 1上,indexOf函数可以是:

func indexOfOld<S : SequenceType>(seq: S, predicate: S.Generator.Element -> Bool) -> Int? {

  for (index, value) in enumerate(seq) {
    if predicate(value) {
      return index
    }
  }
  return nil
}

你要用上面的最后一行替换:

let ans = indexOfOld(ar) { $0.a == 2 } // 1?