2016-12-24 19 views
-1

我希望能夠將無限數量的字符串(可變長度字符串)傳遞給函數,並返回它們是否全部是相同的字符串。如何構建一個比較無限數量的字符串的Swift函數?

這是我到目前爲止已經做了 - 但我需要一些幫助走得更遠:

func compareSymbols(symbols: String...) -> Bool { 
    var symbolsAreEqual = false 
    for symbol in symbols { 

    } 
    return symbolsAreEqual 
} 
+3

可能的重複[檢查數組中的所有元素是否具有相同的值在Swift](http://stackoverflow.com/q/29588158/2976878) – Hamish

+0

不完全重複,因爲這是關於一個函數與variadic參數。我在回答中與@ Martin的優秀答案有關。 – vacawama

+2

@vacawama:它並沒有真正有所作爲,因爲可變參數在函數內被表示爲一個數組。 –

回答

2

把它們放在一個Set(刪除重複),並檢查結果集僅包含一個元素:

func compareSymbols(symbols: String...) -> Bool { 
    return Set(symbols).count == 1 
} 
2

這裏是一個將盡快退出一個版本,因爲它找到一個不同的符號:

func compareSymbols(symbols: String...) -> Bool { 
    if let first = symbols.first { 
     for symbol in symbols.dropFirst() { 
      if symbol != first { 
       return false 
      } 
     } 
    } 
    return true 
} 

compareSymbols(symbols: "a", "a", "a") // true  
compareSymbols(symbols: "a", "b")  // false 
compareSymbols(symbols: "a")   // true 

變量參數(如symbols: String...)在函數內表示爲數組。 @MartinR回答有關數組的類似問題here。他談到使用顯式循環的性能影響與Set對比contains

相關問題