title: Generate Array of Unique Random Numbers within Inclusive Range
body: <p>I am trying to write a function in Apple Swift (iOS) that will generate any given amount of unique random numbers that are within a given inclusive range, say between 0 and 10. So if I say I want 5 unique random numbers between 0 and 10, it would return an array with [7, 10, 2, 3, 0] or [7, 10, 2, 8, 0], etc.</p>
  
  <p>I have that part working with:</p>
  
  <pre><code>// Returns an array of unique numbers
  func uniqueRandoms(numberOfRandoms: Int, minNum: Int, maxNum: UInt32) -&gt; [Int] {
  
      var uniqueNumbers = [Int]()
  
      while uniqueNumbers.count &lt; numberOfRandoms {
  
          let randomNumber = Int(arc4random_uniform(maxNum + 1)) + minNum
          var found = false
  
          for var index = 0; index &lt; uniqueNumbers.count; ++index {
                  if uniqueNumbers[index] == randomNumber {
                      found = true
                      break
                  }
          }
  
          if found == false {
              uniqueNumbers.append(randomNumber)
          }
  
      }
  
      return uniqueNumbers
  }
  
  print(uniqueRandoms(5, minNum: 0, maxNum: 10))
  </code></pre>
  
  <p>Now I want to add the ability to blacklist a single number within that range that I don’t want. Say I still want 5 unique random numbers between 0 and 10 BUT I don’t want it to ever include 8.</p>
  
  <p>That part causes an endless loop (25%+ of the time or more) and I can’t figure out why? Here’s what I have:</p>
  
  <pre><code>var blackListNum = 8
  
  // Returns an array of unique numbers
  func uniqueRandoms(numberOfRandoms: Int, minNum: Int, maxNum: UInt32, checkBlackList: Bool = false) -&gt; [Int] {
  
      var uniqueNumbers = [Int]()
  
      while uniqueNumbers.count &lt; numberOfRandoms {
  
          let randomNumber = Int(arc4random_uniform(maxNum + 1)) + minNum
          var found = false
  
          for var index = 0; index &lt; uniqueNumbers.count; ++index {
              if checkBlackList == false {
                  if uniqueNumbers[index] == randomNumber {
                      found = true
                      break
                  }
              } else {
                  if uniqueNumbers[index] == randomNumber || uniqueNumbers[index] == blackListNum  {
                      found = true
                      break
                  }
              }
          }
  
          if found == false {
              uniqueNumbers.append(randomNumber)
          }
  
      }
  
      return uniqueNumbers
  }
  
  print(uniqueRandoms(5, minNum: 0, maxNum: 10, checkBlackList: true))
  </code></pre>
  
  <p>I understand that my function is far from efficient because I am just starting to learn Swift but I want to keep it similar as I want to understand how it works. I don’t want to simply copy and paste someone else’s more efficient solution and not understand it. I have just learned variables, constants, if, while, for, etc. statements and the other basics and want to keep it to that.</p>