24638


お世話になっております。  
表題の通りですが、Arrayの中から下記のようにデータを抽出するにはどうしたら良いのか？を教えていただきたいです。

Apple  
Apple  
Google  
Google  
Facebook  
Facebook  
Apple  
Google  
Facebook  
Apple  
Google  
Apple

という配列を  
Apple  
Google  
Facebook  
という配列に変換したいです。

一番目のAppleと２番目のStringを比較してAppleと同じであれば消去。  
違っていればスルー。  
一番目のAppleと3番目のStringを比較して同じであれば消去。  
違っていればスルー・・・。  
という具合に比較して、順番に数を減らして行き最終的に、  
Apple  
Google  
Facebook  
という配列に変換したいです。

下記のようのコードを途中まで作ってみたのですが、比較する回数、11回のはずですがそれが違うようです。  
そもそも11回にならない理由がわかりません。  
よろしくお願いします。

> var strArray = ["Apple", "Apple", "Google","Google", "Facebook",  
>  "Facebook","Apple", "Google", "Facebook","Apple", "Google","Apple"]  
>  var c = strArray.count - 1  
>  var x:Int = 0  
>  var z:Int = 0  
>  if c > 2 {  
>  for i in 1...c{  
>  if strArray[x] == strArray[x + z] {  
>  strArray.removeAtIndex(x + z)  
>  }  
>  z = z + 1  
>  print(strArray)  
>  }  
>  }


CC BY-SA 3.0
2016-05-08T02:35:44.577
24637
2016-05-08T04:52:25.033
13156
question
swift
SwiftでArrayの中から1種類づつを抽出したい。


元の配列の順序が維持されないかもしれませんが、別解です。

[code]

    var strArray = ["Apple", "Apple", "Google","Google", "Facebook",
        "Facebook","Apple", "Google", "Facebook","Apple", "Google","Apple"]
    strArray = Array(Set(strArray))
    
[/code]


CC BY-SA 3.0
2016-05-08T03:38:12.793
24638
2016-05-08T03:38:12.793
7283
24637
answer


NSOrderedSetを用いる方法があります。

[code]

    let values = ["1st", "2nd", "3rd", "2nd"]
    let orderedSet = NSOrderedSet(array: values)
    let uniqueValues = orderedSet.array as! [String]
    //["1st", "2nd", "3rd"]
    
[/code]

しかしこの方法では、AnyObjectに限定されてしまう点とas!を利用してしまうという問題点があります。  
[Unique values of array in swift
[duplicate]](https://stackoverflow.com/questions/27624331/unique-values-of-
array-in-swift)ではArrayを拡張して`unique()`を使う方法と`Set`を利用する方法が紹介されてます。


CC BY-SA 3.0
2016-05-08T04:52:25.033
24639
2016-05-08T04:52:25.033
2017-05-23T12:38:56.467
-1
13998
24637
answer