如何在数字间隔Xcode Swift2的条件下进行“for”循环

时间:2016-02-26 12:23:03

标签: ios xcode swift

嘿我想弄清楚如何在不到45分钟内进球得分的情况下计算足球目标,但是func在快速2时有一些轻微的错误。任何帮助?谢谢! enter image description here 代码:

 var barcelonavsRealMadrid1goals : [String : Int] = ["barcelonaGoal1":21,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]


   func Run() {
    var goalCount=0
    for (goal,numbers) in barcelonavsRealMadrid1goals{
        for(var number in numbers) {
            if(number < 45)
            goalCount++

        }
    }

3 个答案:

答案 0 :(得分:4)

你有一个额外的for..in循环,不需要:

for(var number in numbers) {

它周围还有一个无关的()

for var number in numbers {

以下是您的代码的工作版本:

var barcelonavsRealMadrid1goals = ["barcelonaGoal1":21,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]

func run() -> Int { // functions should start with lower case
  var goalCount=0
  for (_,numbers) in barcelonavsRealMadrid1goals where numbers < 45 {
    goalCount++
  }
  return goalCount
}

let goalCount = run()

功能方式如下:

let goalCount = goals.reduce(0) {
  if $0.1.1 < 45 {
    return $0.0 + 1
  }
  return $0.0
}

解释:

var goals = [
  "barcelonaGoal1" :21,
  "RealMadridGoal2":23,
  "barcelonaGoal3" :24,
  "RealMadridGoal4":27,
  "RealMadridGoal5":45]

// For our use reduce takes an initial value of Int
// and a combine function of type
// (Int, (String, Int)) -> Int
//
// Reduce will call the closure once with
// each value in the map and the previous return value
let goalCount = goals.reduce(0, combine: {
  (initial:Int, current:(key:String, value:Int)) -> Int in
  var currentCount = initial

  // print to show input and output of closure
  print( "parameters:(\(initial), (\"\(current.key)\", \(current.value)))", terminator:", ")
  defer {
    print("return:\(currentCount)")
  }
  // end printing

  if current.value < 45 {
    ++currentCount // add 1 to the running total
    return currentCount
  }
  return currentCount
})

// console output:
//   parameters:(0, ("barcelonaGoal1", 21)), return:1
//   parameters:(1, ("RealMadridGoal4", 27)), return:2
//   parameters:(2, ("RealMadridGoal5", 45)), return:2
//   parameters:(2, ("RealMadridGoal2", 23)), return:3
//   parameters:(3, ("barcelonaGoal3", 24)), return:4

答案 1 :(得分:0)

为了解决您的问题,请尝试使用swift中引入的函数式编程:

var barcelonavsRealMadrid1goals : [String : Int] = ["barcelonaGoal1":95,"RealMadridGoal2":23,"barcelonaGoal3":24,"RealMadridGoal4":27]

var filtered = barcelonavsRealMadrid1goals.filter { (team:String, minute:Int) -> Bool in

    var state = false
    if (minute > 45)
    {
        return true
    }
    return state
}


let totalCount = filtered.count

答案 2 :(得分:0)

尝试这种方法。

func Run() {
    var goalCount=0
    for (_, score) in barcelonavsRealMadrid1goals {
            if(score < 45) {
                goalCount++
            }
        }
    print(goalCount)
}