2016-06-30 2 views
2

Я пытаюсь преобразовать myDictionary.dropFirst() в новый словарь без ключа (мне все равно, какой). dropFirst() возвращает фрагмент. Я хочу новый словарь того же типа, что и myDictionary.Как конвертировать словарь Slice в словарь в Swift

Вы можете преобразовать срез массива в массив, подобный этому let array = Array(slice). Что эквивалентно словарю? Если я попробую Словарь (slice), я получаю ошибку компиляции Argument labels '(_:)' do not match any available overloads

Большое спасибо заранее.

ответ

5

Нет такой вещи, как DictionarySlice, как есть ArraySlice. Вместо этого dropFirst() возвращает Slice<Dictionary>, который не поддерживает ключевые подписи, такие как Dictionary. Тем не менее, вы можете цикл через Slice<Dictionary> с парами ключ-значение, как вы можете с Dictionary:

let dictionary = ["a": 1, "b": 2, "c": 3] 

var smallerDictionary: [String: Int] = [:] 

for (key, value) in dictionary.dropFirst() { 
    smallerDictionary[key] = value 
} 

print(smallerDictionary) // ["a": 1, "c": 3] 

Расширение сделает это немного более элегантна:

extension Dictionary { 

    init(_ slice: Slice<Dictionary>) { 
     self = [:] 

     for (key, value) in slice { 
      self[key] = value 
     } 
    } 

} 

let dictionary = ["a": 1, "b": 2, "c": 3] 
let smallerDictionary = Dictionary(dictionary.dropFirst()) 
print(smallerDictionary) // ["a": 1, "c": 3] 

Я бы не рекомендовал делая это, хотя, потому что

  • вы не знаете, какой ключ-значение пары будет отброшен, и
  • это тоже не случайно.

Но если вы действительно хотите это сделать, теперь вы знаете, как это сделать.

Смежные вопросы