2016-03-30 16 views
1

素早く、既存の配列内の項目を分類し、それを1つの新しい文字列に配置したいと考えています。ここでArray内の項目をすばやく分類する方法を教えてください。

は、私が何をしたいの例です。

originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"] 

resultingString = "hotdog x 3, fries x 2, coke x 2" 

は、どのように私はこれを行うに行きますか?

答えて

2

このお試しください:私は

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"] 
var dict = [String: (index: Int, count: Int)]() 

let resultString = originalArray.enumerate() 
    .reduce(dict) { _ , e in 
     if let value = dict[e.element] { 
      dict[e.element] = (index: value.index, count: value.count + 1) 
     } else { 
      dict[e.element] = (index: e.index, count: 1) 
     } 
     return dict 
    } 
    .sort { return $0.1.index < $1.1.index } 
    .map { "\($0) x \($1.count)" } 
    .joinWithSeparator(", ") 

print(resultString) 
+0

これは動作しますが、1つのキャッチで:resultStringを出力すると "hotdog x 3、fries x 2、コークスx 2"と表示されます "どのように"/n "を取り除きますか? –

+0

\ nはプレイグラウンドでのみ表示されます。それは実際のプロジェクトの中で消えるでしょう –

+0

あなたが正しいです、それは私のプロジェクトで働いてしまいました。本当にありがとう! –

2

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"] 
var dict = [String: Int]() 

let resultString = originalArray.reduce(dict) { _, element in 
    if dict[element] == nil { 
     dict[element] = 1 
    } else { 
     dict[element]! += 1 
    } 
    return dict 
} 
.map { "\($0) x \($1)" } 
.joinWithSeparator(", ") 

あなたは配列(すなわち:ホットドッグ、フライドポテト、コーラ)の元の順序を維持したい場合は、コードは少し複雑ですがこれはあなたを助けると思う:ここ

let originalArray = ["hotdog","fries","hotdog","coke","coke","fries","hotdog"] 
var resultingString = "" 
var counts:[String:Int] = [:] 
for item in originalArray { 
    counts[item] = (counts[item] ?? 0) + 1 

} 
resultingString = counts.map { (key, value) -> String in 
    return "\(key) x \(value)" 
}.joinWithSeparator(",") 

print(resultingString) 

が出力されます。coke x 2, hotdog x 3, fries x 2

+0

あなたのコードも動作しますが、1つのキャッチがあります:resultsStringを出力すると "hotdog x 3、fries x 2、coke x 2 \ n"が返されます。 –

+0

print(resultsString、terminator: "") – iMuzahid

+0

はい、うまくいくようですが、ありがとうございます。 –

関連する問題