当前位置: 首页 > 面试题库 >

Swift:将[String]拆分为给定子数组大小的[[String]]的正确方法是什么?

易宏阔
2023-03-14
问题内容

从较大的[String]和给定的子数组大小开始,将这个数组拆分为较小的数组的最佳方法是什么?(最后一个数组将小于给定的子数组大小)。

具体示例:

以最大分割大小2分割[“ 1”,“ 2”,“ 3”,“ 4”,“ 5”,“ 6”,“ 7”]

该代码将产生[[“ 1”,“ 2”],[“ 3”,“ 4”],[“ 5”,“ 6”],[“ 7”]]

显然,我可以手动进行一些操作,但是我觉得像map()或reduce()这样的快速操作可能确实可以实现我想要的效果。


问题答案:

我不会称它为美丽,但这是一种使用方法map

let numbers = ["1","2","3","4","5","6","7"]
let splitSize = 2
let chunks = numbers.startIndex.stride(to: numbers.count, by: splitSize).map {
  numbers[$0 ..< $0.advancedBy(splitSize, limit: numbers.endIndex)]
}

stride(to:by:)方法为您提供每个块的第一个元素的索引,因此您可以使用将这些索引映射到源数组的一个切片advancedBy(distance:limit:)

更具“功能性”的方法只是在数组上递归,如下所示:

func chunkArray<T>(s: [T], splitSize: Int) -> [[T]] {
    if countElements(s) <= splitSize {
        return [s]
    } else {
        return [Array<T>(s[0..<splitSize])] + chunkArray(Array<T>(s[splitSize..<s.count]), splitSize)
    }
}


 类似资料:
  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]

  • 我已经通过字符串的拆分方法留档,但结果并不像预期的那样。当我们将限制参数设置为负值的字符串拆分时,它总是附加一个空值。为何要这样做呢?考虑一些案例 我希望这两张照片都是3。 现在,由于没有找到匹配项,通常的split with limit方法应该打印0,但它创建了一个带有空字符串的数组。 现在我有了一个匹配项,无限制参数的split方法可以很好地工作。它是我预期的输出,但为什么它不在本例中创建一个

  • 给定一个值数组,我如何将它分成由相等元素组成的? 给定这个数组 我想要这个输出 解决这一问题的一种可能方法是创建某种索引,以指示每个元素的出现情况。 最后使用索引重建输出数组。 但是,使用此解决方案,我会丢失原始值。当然,在这种情况下,这不是一个大问题(一个值仍然存在,即使重新创建,),但我想将此解决方案应用于像这样更复杂的数据结构 实际上,我正在寻找的函数是与相反的函数 我希望我已经说清楚了,如

  • 问题内容: 当我表演 我有两个数组分别是23和34 但是当我做了 我在数组23x34中得到了一项 那么,有什么方法可以不区分大小写地使用split方法,或者是否有其他方法可以帮助您? 问题答案: 使用正则表达式模式中

  • 我有示例字符串,例如: 数据Management_Commercial信息管理系统 数据管理_非结构化数据管理(文本文档、纸质表格等。) 我通过< code>input-move-boxes从jsp页面传递字符串。所以在jsp页面中我有: 这种情况下的< code >输入移动框是 在java类中,这些在< code>String[] selecteddm变量中检索。 但我一次传一根绳子。因此,当我

  • 本文向大家介绍将一个数组按照固定大小进行拆分成数组的方法,包括了将一个数组按照固定大小进行拆分成数组的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇将一个数组按照固定大小进行拆分成数组的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。