首先,我认为我的问题与"快速选择什么"的问题不同.因为我在问为什么我能做到这一点,而不是这个.
我是新手.当我今晚学习这种神话般的语言时,我遇到了一个问题,我从未在编程语言中看到过这个标记 - " ? ".我搜索了一会儿.我知道现在有什么可选绑定.
但现在我有了一个新问题.当我想声明一个非可选的变量时.我可以写这个语法:
var friend: String
但我写不出来:
var friend: String = nil
要声明一个nil的变量,我只能使用optional:
var friend: String? = nil
让我们看看第一段代码.当刚声明新的变量朋友时,它的值是nil,对吧?因为我没有为它分配任何价值.但是根据可选的定义,比如第二段和第三段代码,我们不能将nil分配给非可选变量.
所以我的问题是为什么我可以声明一个没有可选标记但没有初始值的变量.这个问题可能很简单,但我真的不知道为什么会这样.
提前致谢!
Swift 中也有一些类似的方法。它们看起来很相似,实际上它们的功能也很相似。他们是:
popFirst(),,,,,,,popLast()dropFirst()dropLast()removeFirst()removeLast()
特别是popFirst()和removeFirst(),根据苹果文档:
函数 popFirst()
删除并返回集合的第一个元素。
函数删除第一个()
删除并返回集合的第一个元素。
他们的文档描述完全相同。实际上我尝试了很多(操场上的整个页面)来看看这些方法之间是否存在一些显着差异。答案是有些方法之间有一些很小的差异,而根据我的测试,有些方法是完全相同的。
某些方法 、popFirst()、popLast()、在String和Array上使用时是不同dropLast()的。但根据我的测试,它们都可以用and代替(尽管有一些微小的差异)。dropFirst()removeFirst()removeLast()
所以我的问题是为什么 Swift 必须保留这些类似的方法。这有点多余吗?
首先,这个问题不是"0美元的意思".我在swift文档中了解到$ 0就像索引一样.
我的问题是"如何numbers.sort { $0 > $1 }用于实现排序功能".我numbers.sort { $0 > $1 }在其他一些网站上搜索过这种语法,比如这个.它显然不是当前的版本.所以我还是无法理解它的含义.
print(numbers) //[20, 19, 1, 12]
let sortedNumbers = numbers.sort { $0 > $1 }
print(sortedNumbers) //[20, 19, 12, 1]
有人可以为我解释上面这段简单的代码吗?就像这个简单的代码如何$0 > $1实现sort函数一样,将数字从大到小排序.
我知道一些关于索引,这个$ 0看起来像索引,但它只有$ 0和$ 1两个索引.那怎么能用到4个数字呢?根据我之前在C++中的知识,我无法理解其中的原理.
请尽可能具体说明您的答案.谢谢!
-----------------以下是编辑的额外部分-------------------
我不知道stackoverflow是否允许我像这样编辑我的问题,但是这个额外的部分太长了,所以我不能在评论中添加它.@pbodsk @Paul Richter
所以swift中的sort()语法使用快速排序来处理排序函数?
其实我的问题更多的是关于"什么是工作原理的sort{$0 > $1}".我知道你的意思,我认为这与swift 2.1文件所说的相似,但你的回答并不是我真正想知道的.对不起,我的英文表达不是很好.让我尝试另一种方式.
当我之前学习C++时,总会有一些文档来解释函数的操作原理是什么,或者这个函数(如此处的sort()如何)在后台运行.Sort()这里需要比较第一次和第二次交换.在C++中,它就像
if numbers[1] < numbers[2]{ //just consider …我很快乐.我偶然遇到了这个问题.
这是Swift编程语言(Swift 2.1)中的一个例子.
let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)
可以看出,score是上面代码部分中的变量.但它在使用之前显然没有声明.我的意思是,没有这样的语法:
var score: Int
要么
var score = 0
我只是想知道为什么或如何做到这一点,使用变量而不用var语法声明其类型.
由于C++中的语法(Swift在某种程度上与C++类似),如果尚未声明变量,则应该"无法识别".
提前致谢.
这是伪代码.我试图计算这个函数的时间复杂度,正如这个答案所说的那样.应该是这样的:
n + n/3 + n/9 + ... 
也许时间的复杂性就像O(nlog(n))我猜的那样?或者log(n)应该是log(n) 基数3?有人说时间复杂度是O(n),这对我来说是完全不可接受的.
j = n
while j >= 1 {
    for i = 1 to j {
        x += 1
    }
    j /= 3
}