Swift过滤包含在对象数组中的相同位置坐标

时间:2017-08-09 10:27:44

标签: ios arrays swift mapkit

我从服务器收到一个对象数组中的商店信息列表。以下是一个示例 -

"stores": [
    {            
        "name": “Store 1”,
        "number": "5381",           
        "country": "BELGIE",
        "latLng": [
            50.730614,
            4.231847
        ]

    },
    {            
        "name": "Store 2”,
        "number": "5220",            
        "country": "BELGIE",
        "latLng": [
            50.730614,
            4.231847
        ]

    },
    {            
        "name": "Store 3”,
        "number": "3982”,           
        "country": "BELGIE",
        "latLng": [
            50.7315706,
            4.2303477
        ]

    },
    {           
        "name": "Store 4”,
        "number": "4179",            
        "country": "BELGIE",
        "latLng": [
            50.7262577,
            4.245589
        ]           
    }]

我在尝试什么?: 我需要过滤掉具有相同latLng值的数组中的商店。

为什么吗 我需要识别这些“相同的latLng”值,并在纬度值上添加一些值(如0.001)的偏移量,这样当我在地图上显示这些商店时,同一位置上的商店会并排显示。

I found this(由 Rob B 回答)作为此方法的参考。

我需要什么?
1.如何使用数组中对象内的值进行过滤? 我在for循环中尝试了类似的东西 -

print("\(allStoresInfo.filter({ $0.latLng![0] == $0.latLng![0] }).count)")

This value always returns 4. I know I am missing some basic sense here but need know what it is :-(
  1. 在我过滤并为相同值添加偏移后,如何使用这些更新的值更新数组?

1 个答案:

答案 0 :(得分:3)

以下方法修改了与另一家商店的纬度相匹配的每个商店的纬度:

allStoresInfo.map{ currentStore in allStoresInfo.filter{$0.latLng![0] == currentStore.latLng![0]}.enumerated().forEach{ index, matchingStore in
        matchingStore.latLng![0] += Double(index)*0.001
    }
}

只是一小段建议:不要在数组中存储lat-long值。为它们创建结构/类或使用元组来存储它们。