2017-04-10 30 views
1

我是使用Xcode版本8.3的Swift新手。我有一個字符串數組,我試圖找到數組的模式值。在Swift中查找字符串數組的方式

我已經嘗試了建議代碼從這個堆棧溢出後(並且已經搜查他人):Swift 3: Getting the most frequent value of an array

但我沒有得到它的工作。

在試圖NSCountedSet:

let countedSet = NSCountedSet(array: myArray) 
let mostFrequent = countedSet.max { countedSet.count(for: $0) < 
countedSet.count(for: $1) } 

控制檯打印出「無」一旦運行,也許是因爲我的數組是字符串數組?似乎.max在我的Xcode版本中不再有效。我不確定。

我也試過使用「hashable」和「reduce」,並且無法讓這些工作。我得到的錯誤「聲明只在文件範圍內有效」:

extension Array where Element: Hashable { 
           var mode: Element? { 
            return self.reduce([Element: Int]()) { 
             var counts = $0 
             counts[$1] = ($0[$1] ?? 0) + 1 
             return counts 
             }.max { $0.1 < $1.1 }?.0 
           } 
          } 

我想模式存儲作爲一種價值,所以我不知道,使用字典將是適當的。

任何建議將非常感激。

謝謝!

+0

這是一個相當體面的方式來做到這一點。錯誤發生是因爲您可能試圖在另一個類/結構體/枚舉/擴展的範圍內聲明此擴展。如錯誤所示,該擴展的聲明必須位於文件範圍內 – Alexander

回答

1

如果你有一個數組的數組,最簡單的事情將是使用joined將它們摺疊成一個簡單的數組:

let samples = [[ 1, 2, 3 ], [4, 5, 6, 1]] 
let flattened = [Int](samples.joined()) 
let counted = NSCountedSet(array:flattened) 
let max = counted.max { counted.count(for: $0) < counted.count(for: $1) } 
相關問題