【问题标题】:shuffle array after index索引后的随机数组
【发布时间】:2018-12-12 10:52:10
【问题描述】:

我正在尝试在特定索引之后对数组进行洗牌,我使用了拆分/加入机制,但是,有什么有效的方法吗?

例如:

var arr = [0,1,2,3,4,5,6,7,8,9]


arr.shuffle(after index:4)
print(arr) -> //[0,1,2,3,4,7,9,8,6]

arr.shuffle(after index:0)
print(arr) -> //[0,3,2,1,4,9,8,6,8]

【问题讨论】:

    标签: swift shuffle swift4.2


    【解决方案1】:

    shuffle()MutableCollection 协议的一个方法,因此可以应用于数组slice。示例:

    var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    arr[5...].shuffle() // Shuffle elements from index 5 to the end
    print(arr) // [0, 1, 2, 3, 4, 6, 8, 7, 5, 9]
    

    【讨论】:

      【解决方案2】:
      extension Array {
          mutating func shuffle(fromIndex:Int) {
              self[fromIndex...].shuffle()
          }
      
          func shuffled(fromIndex:Int) -> [Element]{
              return self[..<fromIndex] + self[fromIndex...].shuffled()
          }
      }
      
      var arr = [0,1,2,3,4,5,6,7,8,9]
      arr.shuffle(fromIndex: 4) // 0,1,2,3,x,x,x,x,x,x - x - any of the value of 4...9
      
      let arr2 = [0,1,2,3,4,5,6,7,8,9]
      var arr3 = arr2.shuffled(fromIndex: 4)
      

      要使mutating func shuffle(fromIndex:Int) 起作用,数组必须是var。这不适用于letfunc shuffled(fromIndex:Int) -&gt; [Any] - 用于 let 数组的洗牌副本

      【讨论】:

      • 一种引用(并改变)全局变量的数组扩展方法? – 你的意思可能类似于self[fromIndex...].shuffle()。另请注意,您的方法不会return 任何东西。
      • 另外,如果 arr 是一个 let 常量,我想知道如何实现这一点。
      • 我认为let 是不可能的!!
      • 返回[Any] 不好,因为所有类型信息都丢失了。更好的回报[Element]
      • @LeoDabus: return self[fromIndex...].shuffle() 确实会改变 self 并返回 void - 当然 return 语句在这一点上是完全没有必要的(并且令人困惑)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-24
      相关资源
      最近更新 更多