Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将我的代码转换为更好的快速响应_Swift_Swift2 - Fatal编程技术网

Swift 将我的代码转换为更好的快速响应

Swift 将我的代码转换为更好的快速响应,swift,swift2,Swift,Swift2,昨晚我在做一些编程的时候在互联网上搜索,我注意到有一个有趣的测试,雇主有时会用它来测试程序员,看看他们是否能将代码应用到现实世界的问题上。它被称为嘶嘶声测试,其工作原理如下 “编写一个程序,打印数字1到100。但是,对于倍数 如果是3,则打印“嘶嘶”而不是数字,如果是5的倍数,则打印 “嗡嗡声”。用于打印三和五的倍数数字 “嘶嘶作响” 现在,我坐下来,很快就想到了这段代码,我把它放在了viewDidLoad方法中: for i in 1...100 { if i % 3

昨晚我在做一些编程的时候在互联网上搜索,我注意到有一个有趣的测试,雇主有时会用它来测试程序员,看看他们是否能将代码应用到现实世界的问题上。它被称为嘶嘶声测试,其工作原理如下

“编写一个程序,打印数字1到100。但是,对于倍数 如果是3,则打印“嘶嘶”而不是数字,如果是5的倍数,则打印 “嗡嗡声”。用于打印三和五的倍数数字 “嘶嘶作响”

现在,我坐下来,很快就想到了这段代码,我把它放在了viewDidLoad方法中:

for i in 1...100 {
            if i % 3 = 0 && i % 5 == 0 {
                print("FizzBuzz")
            } else if i % 3 == 0 {
                print("Fizz")
            } else if i % 5 == 0 {
                print("Buzz")
            } else {
                print(i)
            }
        }
虽然这能完成简短的工作,但我对用这个作为我的解决方案感到非常不满(对我来说,它似乎太简单和基本了)

我最近读了Matt Neuburg的书《iOS 9编程基础与Swift》(这本书在很多方面都让我大开眼界)。我被尽可能快地完成任务(传递函数等)所吸引。然后,我清醒而沮丧地意识到,我真的不知道如何改进这段代码

因此,我求助于Swift社区,希望您能更好地教育我,让我知道什么是FiizBuzz测试问题最复杂的Swift答案


我正在努力改进我的Swift编程,并想知道一种更好的Swift-y编程方法来处理我的代码。

在操场上尝试一下。这是一种功能性方法的尝试。这是没有效率的

let range = (1...100)
let fizz  = range.map{ ($0 % 3 == 0) ? "Fizz" : "" }
let buzz  = range.map{ ($0 % 5 == 0) ? "Buzz" : "" }
zip(range, zip(fizz, buzz))
  .map {
    let fb = $1.0 + $1.1
    print(fb.isEmpty ? $0 : fb)
  }

在丹的评论之后,我想到了:

for i in 1...100 {
  switch (i%3, i%5) {
  case (0,0): print("FizzBuzz")
  case (0,_): print("Fizz")
  case (_,0): print("Buzz")
  default: print(i)
  }
}
1
2
起泡
4
嗡嗡声
起泡
7
8
起泡
嗡嗡声
11
起泡
13
14
嘶嘶作响


相关:Price Ringo,这确实是我期待从每个人那里得到的答案。真的很好。除非我采访你,你给出了这个答案,否则我不会那么高兴。它不仅效率低下,更重要的是难以阅读。可以说,对于循环大小为100的效率来说,这并不是什么大问题,但从可维护性的角度来看,这很糟糕。我同意,并在我的回答中说明了这一点。斯威夫特让我第一次接触函数式编程,我想尝试用这种方式解决它。FP不是万灵药。OP想要的是“FiizBuzz测试问题最复杂的快速答案”,而不是最好的答案。Kenneth Bruno,我立即注意到你的代码有一点,那就是能够非常轻松地升级或增加参数的数量(我知道这不是简短的部分,但仍然是一个非常好的选择)。例如,如果您想查看数字是3、5和9的倍数的事件。您可以很容易地添加i%9,然后添加case(0,0,0)和适当的代码来满足switch语句。当我看到我构建的示例时,我最喜欢的是它的简洁、清晰和可读性。它也相当有效。
switch..case
语句中的元组功能强大。