相关疑难解决方法(0)

如何在Swift中对数组进行洗牌?

如何在Swift中随机化或混洗数组中的元素?例如,如果我的阵列由52张扑克牌,我想洗牌的阵列,以洗牌.

arrays shuffle swift

297
推荐指数
8
解决办法
8万
查看次数

为什么count会为Collection vs. Array返回不同的类型?

当我伸出Collection的类型countIndexDistance.

当我扩展Array类型时count,类型Int

为什么会有这样的区别?这是最近的变化还是总是像这样?

我已经阅读了这个答案,但不能捡到太多.

我认为唯一相关但却不理解的是:

另一个优点是,[IndexDistance]也可以正确处理数组切片(其中第一个元素的索引不一定为零)

不确定那是什么意思.

我问的原因是为什么代码会在Collection上抛出错误但在Array上没有这样做...尽管两者count最终都是Int.

extension Collection where Element: Comparable{
    func whatever(){
        for index in 0...count{ //  binary operator '...' cannot be applied to operands of type 'Int' and 'Self.IndexDistance'

        }
    }
}

extension Array where Element: Comparable{
    func whatever(){
        for index in 0...count{ // NO ERROR
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

根据Martin和其他人的评论,我添加了一个额外的问题.可能这是我问题的根本原因......

这是否意味着中Collection类型IndexDistance 没有定义Int.基本上一般来说,在"协议"级别,关联 …

arrays collections count associated-types swift

14
推荐指数
1
解决办法
841
查看次数

从Swift中的数组中获取随机元素

我有一个像这样的数组:

var names: String = [ "Peter", "Steve", "Max", "Sandra", "Roman", "Julia" ]
Run Code Online (Sandbox Code Playgroud)

我想从该数组中获取3个随机元素.我是从C#来的,但是我很快就不知道从哪里开始.我想我应该首先将阵列洗牌,然后从中挑选前3个项目?

我尝试使用以下扩展名对其进行随机播放:

extension Array
{
    mutating func shuffle()
    {
        for _ in 0..<10
        {
            sort { (_,_) in arc4random() < arc4random() }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但它然后说"'()'在"shuffle()"的位置不能转换为'[Int]'".

为了挑选我使用的一些元素:

var randomPicks = names[0..<4];
Run Code Online (Sandbox Code Playgroud)

到目前为止看起来不错.

怎么洗牌?或者有没有人有更好/更优雅的解决方案?

arrays random shuffle swift

13
推荐指数
3
解决办法
1万
查看次数

Swift使用哪种通用排序算法?它在排序数据上表现不佳

我一直在选择和探测Swift标准库sort()函数的Array类型.令我惊讶的是,我注意到它在已经排序的数据上表现不佳.

对一个数组进行排序的排序Int似乎比已经排序的同一个数组的排序速度快5倍.对一个混洗对象的数组进行排序比按排序顺序排序相同的数据快4倍(排序对象数组与Int数组使用不同的算法我确定所以我将它们排序以消除偏差).

这些是结果:

Shuffled Int array sort time: 1.3961209654808
Shuffled ColorObject array sort time: 3.14633798599243
NOnshuffled Int array sort time: 7.34714204072952
NOnshuffled ColorObject array sort time: 10.9310839772224
Run Code Online (Sandbox Code Playgroud)

以下是我的代码参考:

class ElapsedTimer {

    let startTime: CFAbsoluteTime
    var endTime: CFAbsoluteTime?

    init() {
        startTime = CFAbsoluteTimeGetCurrent()
    }

    func stop() -> CFAbsoluteTime {
        endTime = CFAbsoluteTimeGetCurrent()
        return duration!
    }

    var duration: CFAbsoluteTime? {
        if let endTime = endTime {
            return endTime - startTime
        } else {
            return …
Run Code Online (Sandbox Code Playgroud)

arrays sorting performance time-complexity swift

13
推荐指数
3
解决办法
5556
查看次数

用Swift同样的方式随机化两个数组

我知道iOS 9中有一种新的随机播放方法, 但是我想知道是否仍然可以用相同的方式随机播放两个数组?

例如

[1,2,3,4] and [a,b,c,d]
shuffle
[3,4,1,2] and [c,d,a,b]
Run Code Online (Sandbox Code Playgroud)

swift

2
推荐指数
1
解决办法
819
查看次数