【问题标题】:Filtering on Keys inside an array of objects [closed]过滤对象数组中的键[关闭]
【发布时间】:2020-02-27 06:37:29
【问题描述】:

我有一个对象数组,我想创建另一个包含这些过滤对象的对象数组。

我原来的数组

    "Items": [
            {
              "Aisle": 1,
              "CabinClass": "F",
              "CabinSideA": "L",
              "CabinSideB": "XL",
              "CabinSideC": "XL",
              "CabinSideD": "XL",
              "CabinSideE": "L",
              "CabinSideF": "R",
              "CabinSideG": "XR",
              "CabinSideH": "XR",
              "CabinSideJ": "XR",
              "CabinSideK": "R",
              "ConfigA": {
                "Primary": [],
                "Secondary": "W"
              },
              "ConfigB": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigC": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigD": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigE": {
                "Primary": [],
                "Secondary": "A"
              },
              "ConfigF": {
                "Primary": [],
                "Secondary": "A"
              },
              "ConfigG": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigH": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigJ": {
                "Primary": [],
                "Secondary": ""
              },
              "ConfigK": {
                "Primary": [],
                "Secondary": "W"
              },
              "Deck": "U",
              "FltKey": 6013807,
              "IsDeleted": false,
              "RowA": "A",
              "RowB": "X",
              "RowC": "X",
              "RowD": "X",
              "RowE": "A",
              "RowF": "A",
              "RowG": "X",
              "RowH": "X",
              "RowJ": "X",
              "RowK": "A"
            }
,
{
      "Aisle": 2,
      "CabinClass": "F",
      "CabinSideA": "L",
      "CabinSideB": "XL",
      "CabinSideC": "XL",
      "CabinSideD": "XL",
      "CabinSideE": "L",
      "CabinSideF": "R",
      "CabinSideG": "XR",
      "CabinSideH": "XR",
      "CabinSideJ": "XR",
      "CabinSideK": "R",
      "ConfigA": {
        "Primary": [],
        "Secondary": "W"
      },
      "ConfigB": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigC": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigD": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigE": {
        "Primary": [],
        "Secondary": "A"
      },
      "ConfigF": {
        "Primary": [],
        "Secondary": "A"
      },
      "ConfigG": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigH": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigJ": {
        "Primary": [],
        "Secondary": ""
      },
      "ConfigK": {
        "Primary": [],
        "Secondary": "W"
      },
      "Deck": "U",
      "FltKey": 6013807,
      "IsDeleted": false,
      "RowA": "A",
      "RowB": "X",
      "RowC": "X",
      "RowD": "X",
      "RowE": "A",
      "RowF": "A",
      "RowG": "X",
      "RowH": "X",
      "RowJ": "X",
      "RowK": "A"
    }
    ]

我想过滤只包含"CabinSide%"的键

所以我的目标数组应该是这样的

[
{
      "CabinSideA": "L",
      "CabinSideB": "XL",
      "CabinSideC": "XL",
      "CabinSideD": "XL",
      "CabinSideE": "L",
      "CabinSideF": "R",
      "CabinSideG": "XR",
      "CabinSideH": "XR",
      "CabinSideJ": "XR",
      "CabinSideK": "R"
},
{
      "CabinSideA": "L",
      "CabinSideB": "XL",
      "CabinSideC": "XL",
      "CabinSideD": "XL",
      "CabinSideE": "L",
      "CabinSideF": "R",
      "CabinSideG": "XR",
      "CabinSideH": "XR",
      "CabinSideJ": "XR",
      "CabinSideK": "R"
}
]

【问题讨论】:

  • 你有没有费心自己尝试什么?

标签: arrays swift xcode filtering nsarray


【解决方案1】:

如果dict被定义为,

let dict = [
    "Items": [
        [
            "Aisle": 1,
            ...
        ],
        [
            "Aisle": 2,
            ....
        ]
    ]
]

在items Dictionary 上使用map(_:) 和filter(_:) 方法以获得预期结果,

if let items = dict["Items"] as? [[String:Any]] {
    let results = items.map { $0.filter({ $0.key.hasPrefix("CabinSide") }) }
    print(results)
}

输出:

[["CabinSideC": "XL", "CabinSideB": "XL", "CabinSideD": "XL", "CabinSideA": "L", "CabinSideE": "L", "CabinSideH": "XR", "CabinSideG": "XR", "CabinSideF": "R", "CabinSideJ": "XR", "CabinSideK": "R"], ["CabinSideC": "XL", "CabinSideB": "XL", "CabinSideD": "XL", "CabinSideA": "L", "CabinSideE": "L", "CabinSideH": "XR", "CabinSideG": "XR", "CabinSideF": "R", "CabinSideJ": "XR", "CabinSideK": "R"]]

【讨论】:

  • 我已将“项目”存储在 [Any] 类型的数组中
  • items 必须是 [[String:Any]] 类型。
【解决方案2】:

假设你有一个变量dict来存储上面的json。

var outputItems: [[String: Any]] = []
if let items = dict["Items"] as? [[String: Any]] {
    for item in items {
        print(item)
        outputItems.append(item.filter({ (key, value) -> Bool in
            key.starts(with: "Cabin")
        }))
    }
}

变量 outputItems 将包含您需要的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多