在字典Swift中找到最小的数字

时间:2014-06-08 01:47:42

标签: dictionary boolean swift

我试图找到字典中也是假的最小数字。我也在使用新的Swift语言。我怎样才能做到这一点?

var firstRow = [1: false, 2: false, 3: false, 4: false, 5: false, 6: false]




  for (number, bool) in firstRow {

            if bool == false {

              //  NSLog("\(number)")


                for i = number; i > 0; i-- {
                    if number <= smallest {

                        smallest = number

                        NSLog("\(smallest)")
                    }

                }
               // NSLog("\(bool, number)")
            }
      }

4 个答案:

答案 0 :(得分:2)

你走了:

var smallest = 10000000000
for (number, bool) in firstRow {

        if bool == false && number < smallest{
             smallest = number

        }
}
println("\(smallest)")

答案 1 :(得分:0)

如果您在Swift中严格执行此操作,我会在添加更改时使用ASKASK:

let firstRow = [1: true, 2: false, 3: true]

var smallest = Int.max

for (number, bool) in firstRow {
    if bool == false && number < smallest {
        smallest = number
    }
}

我们无法保证在您的词典中枚举您的键值对的顺序,因此,在此示例中,您的键是以升序显示的整数这一事实对我们没有帮助,仍然需要检查词典中的每一对。

你可能会从这里使用一个元组数组中受益,特别是如果你事先知道相关的整数将按递增的顺序添加到你的集合中 - 或者即使你没有,那么你至少可以排序数组由每个元组中的第一个值组成,从而在适当的时候中断for循环;例如:

let firstRow = [(1, true), (2, false), (3: true)]
var smallest: Int!  // given that it might be possible _none_ of them are 'false'
for (number, bool) in firstRow {
    if bool == false {
        smallest = number
        break
    }
}

答案 2 :(得分:0)

在Swift的数组上有seems to be内置filter()方法,所以我会选择以下内容:

let falseNumbers: Int[] = firstRow.keys.filter { firstRow[$0] == false }
let smallestFalseNumber: Int = sort(falseNumbers)[0]

以上假设firstRow字典中至少有一个错误值。为了确保:

if find(firstRow.values, false) {
    // The above code
}

答案 3 :(得分:0)

您可以使用内置的min(by:)方法通过键或字典中的值获取最小值。

let minmum = firstrow.min { a, b in
    return a.value < b.value
 }
 // use minimum object to print key and value 
 print(minimum.key)
 print(minimum.value)