arrays - Swift, the for loop index value does not change as expectation -


here code, inside of loop, there while loop changes variable i's value. printed out value of before while loop , and after loop, new "before index value" expected start @ "after index value +1". however, "new before index value" increase normal, increase 1 each time. appreciate time.

class solution {     func summaryrange(nums: [int]) -> [string]     {         var result = [string]()          if nums.count == 1         {             result.append(string(nums[0])+"")             return result         }          var in (0...nums.count-1)         {             let = nums[i]             print("before: \(i)")              while i+1<nums.count && (nums[i+1] - nums[i] == 1)             {                 += 1             }              if != nums[i]             {                 result.append(string(a) + "->" + string(nums[i]))             }             else             {                 result.append(string(a)+"")             }              print("after: \(i)")          }           return result     } }    var test = solution() var input = [0,1,2,4,5,7] var result = test.summaryrange(input) print(result) 

this code tries result ["0->2","4->5","7"]

this interesting one. think trick (with code cleanup :-]

class solution {   func summaryrange(nums: [int]) -> [string] {     var result = [string]()     var currentrange = [int]()      num in nums {       if currentrange.isempty {                           //if range empty, start new range         currentrange.append(num)         continue       }       if num - 1 != currentrange.last! {                  //if not next number in sequence, close range, start new         result.append(closerange(currentrange))         currentrange = []         currentrange.append(num)       } else if num - 1 == currentrange.last {         currentrange.append(num)                          //if next number, add range       }     }     if !currentrange.isempty {       result.append(closerange(currentrange))            //check unclosed ranges     }     return result   }    func closerange(range: [int]) -> string {     guard range.count > 0 else { return "" }     if range.count == 1 { return string(range.first!) }     return "\(range.first!)->\(range.last!)"   } }  var test = solution() var input = [0,1,2,4,5,7] var result = test.summaryrange(input) print(result) 

let me know how works you!