Swift - словарь .last (где: - PullRequest
0 голосов
/ 29 июня 2019

Почему я не могу использовать .last(where: в словаре типа: [TimeInterval : [String : (amount: Double, ids: [Int64])]]

Работает только .first(where:.

Мне нужен последний ключ, где String = "something"

Как заставить это работать?

1 Ответ

1 голос
/ 29 июня 2019

Есть две проблемы с вашим вопросом.

  1. Словари неупорядочены, поэтому понятие первого на самом деле не определено. Вы можете использовать KeyValuePairs вместо.

  2. Мне нужен последний ключ, где String = "something"

    не указывает, хотите ли вы, чтобы это был единственный ключ или нет. Я предполагаю последнее.

Это должно дать вам то, что вы хотите:

let dict: KeyValuePairs<TimeInterval, [String: (amount: Double, ids: [Int64])]> = [
    0: ["something": (0.0, [])],
    4: ["foo": (1.0, [3])],
    10: ["something": (4.0, [4,2,1])]
]

vals.first { $1["something"] != nil }?.key // => 0

vals.reversed().first { $1["something"] != nil }?.key // => 10
...