【问题标题】:How to shuffle 2 dimensional array at first level only in Kotlin如何仅在 Kotlin 中对第一级二维数组进行洗牌
【发布时间】:2020-01-25 06:13:52
【问题描述】:

我有一个二维数组Array<Array<Int>>,我只想在第一级洗牌,但我没有成功。

contentTitle = arrayOf(
                arrayOf(R.drawable.ic_fathah1_1, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_2, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_3, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_4, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_5, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_6, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_7, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_8, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_9, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_10, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_11, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_12, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_13, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_14, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_15, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_16, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_17, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_18, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_19, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_20, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_21, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_22, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_23, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_24, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_25, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_26, R.raw.ahem_x),
                arrayOf(R.drawable.ic_fathah1_27, R.raw.bad_disk_x),
                arrayOf(R.drawable.ic_fathah1_28, R.raw.baseball_hit),
                arrayOf(R.drawable.ic_fathah1_29, R.raw.bloop_x),
                arrayOf(R.drawable.ic_fathah1_30, R.raw.blurp_x),
                arrayOf(R.drawable.ic_fathah1_31, R.raw.ahem_x)
            )
            contentTitle.shuffle()

我用谷歌搜索了这个问题,只发现了可变列表的改组。 如何为我的第一级数组实现简单的随机播放?

【问题讨论】:

  • 随机播放扩展不适用于数组。也许您应该将其转换为列表,然后对其进行随机播放,然后将其转换为数组。 contentTitle.asList().shuffled().toTypedArray()
  • @RaminBoodaghi 我对此很陌生。你能告诉我当前数组的上下文吗?

标签: android arrays kotlin


【解决方案1】:

不幸的是,目前还没有数组的shuffle() 实现。请参阅此处的discussion 和相关的issue。目前您可以添加自己的实现,例如:

fun Array.shuffle(rnd: java.util.Random) {
    // Fisher-Yates shuffle algorithm
    for (i in this.size - 1 downTo 1) {
        val j = rnd.nextInt(i + 1)
        val temp = this[i]
        this[i] = this[j]
        this[j] = temp
    }
} 

基于MutableList.shuffle()实现的实现,你可以找到here

另一种解决方案可能是将数组转换为列表,将其打乱并转换回来,但这是低效的方法:

val array = arrayOf(1, 2, 3, 4)
val shuffledArray = array
    .toMutableList()
    .apply { shuffle() }
    .toTypedArray()

【讨论】:

    【解决方案2】:

    将您的array 转换为MutableList,然后随机播放列表。

    在您的情况下,不要直接创建二维数组,而是尝试创建一个 MutableList 来保存您所有的 Int 数组

    var mutableList = mutableListOf(
                arrayOf(1,2,3,4),
                arrayOf(5,6,7,8),
                arrayOf(9,10,11,12),
                arrayOf(13,14,15,16))
    

    一旦你有了MutableList,你就可以使用shuffle函数

    mutableList.shuffle()
    

    改组后将MutableList 转换为二维数组使用

     var arr = mutableList.toTypedArray()
    

    【讨论】:

    • 这是一个很好的解决方案,除非性能是一个问题。如果您使用的是数组而不是列表,那么这是一个主要的性能损失
    【解决方案3】:

    随机播放扩展不适用于数组。也许您应该将其转换为列表,然后对其进行随机播放,然后将其转换为数组

    contentTitle = arrayOf(
                    arrayOf(R.drawable.ic_fathah1_1, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_2, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_3, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_4, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_5, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_6, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_7, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_8, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_9, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_10, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_11, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_12, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_13, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_14, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_15, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_16, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_17, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_18, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_19, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_20, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_21, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_22, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_23, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_24, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_25, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_26, R.raw.ahem_x),
                    arrayOf(R.drawable.ic_fathah1_27, R.raw.bad_disk_x),
                    arrayOf(R.drawable.ic_fathah1_28, R.raw.baseball_hit),
                    arrayOf(R.drawable.ic_fathah1_29, R.raw.bloop_x),
                    arrayOf(R.drawable.ic_fathah1_30, R.raw.blurp_x),
                    arrayOf(R.drawable.ic_fathah1_31, R.raw.ahem_x)
                ).asList().shuffled().toTypedArray()
    

    【讨论】:

      猜你喜欢
      • 2019-02-07
      • 2021-11-13
      • 1970-01-01
      • 2021-12-17
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多