2015-05-16 4 views
0

Предположим, у меня есть массив, который содержит несколько названий стран, таких как «Австралия, Дания, Великобритания, Австрия, Австралия, Дания». Некоторые названия стран появляются дважды.Как я могу отсортировать массив в словаре?

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

Если у меня есть две страны в моем массиве, которые являются одинаковыми, ключ будет страной, а элементами будут те две страны.

Мне это нужно, так что если я добавлю другую страну, он сделает ключ для страны, не указывая заранее.

Каждая страна должна находиться под ключом своей страны, не зависящей от вхождений страны в массив.

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

  1. при перечислении через массив
  2. проверку, чтобы увидеть, если ключ в словаре соответствует текущей строке
  3. Если это произойдет, добавьте строку в словарь под соответствующим ключом
  4. Если это Безразлично 'Создайте ключ и поместите строку под ключ.

Правильно ли этот алгоритм или, по крайней мере, шаг в правильном направлении?

Спасибо за помощь.

EDIT: У нас есть массив, который содержит названия стран «Австралия, Дания, Великобритания, Австрия, Австралия, Дания»

мне нужно организовать это в словарь на основе стран, так как у нас есть два страны Дании в массиве мне нужно отсортировать его так, это выглядит следующим образом:

Denmark: "Denmark", "Denmark" 

ключ название страны, а элемент является строкой.

Соединенное Королевство происходит только один раз, так что часть словаря будет выглядеть следующим образом:

United Kingdom: "United Kingdom" 

Я надеюсь, что я сделал больше смысла.

+0

В чем разница между «именем страны» и «страной» - что должно быть ключевым, дать более точный и/или подробный пример. – luk2302

+2

Если есть только повторные названия стран без дополнительной информации, тогда может быть более подходящим NSCountedSet. - В противном случае, если вы хотите «создать или обновить» словарь, тогда это может быть полезно: http://stackoverflow.com/questions/29606813/shortcut-to-modify-a-hash. –

ответ

4

Не уверен, что это именно то, что вы имели в виду. Это не очень понятно.

var dict = [String: [String]]() 
let countries = ["Holland", "England", "France", "Belgium", "England"] 

for country in countries { 
    dict[country] = (dict[country] ?? []) + [country] 
} 

for (key, value) in dict { 
    println("KEY: \(key) & VALUE: \(value)") 
} 

Выход:

KEY: England & VALUE: [England, England] 
KEY: Belgium & VALUE: [Belgium] 
KEY: Holland & VALUE: [Holland] 
KEY: France & VALUE: [France] 

EDIT:
Упрощенная на основе связи Мартина ¨R в своем комментарии.

+0

, так как вам понравился ярлык, вы должны проголосовать за автора. ;-) – vacawama

+0

@vacawama Ха-ха, конечно. Как я мог забыть это сделать :) – Eendje

0

Самый простой способ - просто перебрать массив и проверить, существует ли ключ в словаре. Сделайте каждое значение словаря NSMutableArray.

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