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

如何交错两个数组?

韩刚洁
2023-03-14
问题内容

如果我有两个数组,例如

let one = [1,3,5]
let two = [2,4,6]

我想以以下模式[one [0],two [0],one [1],two [1]等合并/交织数组。

//prints [1,2,3,4,5,6]
let comibned = mergeFunction(one, two)
print(combined)

什么是实现合并功能的好方法?

func mergeFunction(one: [T], _ two: [T]) -> [T] {
    var mergedArray = [T]()
    //What goes here
    return mergedArray
}

问题答案:

如果两个数组的 长度相同, 那么这可能是一种解决方案:

let one = [1,3,5]
let two = [2,4,6]

let merged = zip(one, two).flatMap { [$0, $1] }

print(merged) // [1, 2, 3, 4, 5, 6]

此处zip()枚举并行的数组,并返回一对对(2元素元组)的序列,每个数组中都有一个元素。flatMap()从每对创建一个2元素数组,并将结果连接起来。

如果数组的 长度 可以 不同, 则可以将较长数组的额外元素附加到结果中:

func mergeFunction<T>(one: [T], _ two: [T]) -> [T] {
    let commonLength = min(one.count, two.count)
    return zip(one, two).flatMap { [$0, $1] } 
           + one.suffixFrom(commonLength)
           + two.suffixFrom(commonLength)
}

Swift 3更新:

func mergeFunction<T>(_ one: [T], _ two: [T]) -> [T] {
    let commonLength = min(one.count, two.count)
    return zip(one, two).flatMap { [$0, $1] } 
           + one.suffix(from: commonLength)
           + two.suffix(from: commonLength)
}


 类似资料:
  • 我正在尝试开发一个程序,通过将甲板分成两个然后交错来洗牌甲板。 Class Deck代表52张牌的一副牌。有两种方法:Deck(int n)和Card drawCard()。 Deck(int n)是构造函数。该参数告诉牌组应该洗牌多少轮。在每轮洗牌中,整个甲板首先被分成两个子甲板。副甲板然后交错成一整层甲板。 一些注意事项: > 为了简化讨论,我们假设卡片是1,2,…,10。 Card draw

  • 问题内容: 对于下面的输出,我需要做什么? 我调查了一下,但是正如javadoc所解释的,它只是一个接一个地追加,它不会交错/散布。 创建一个延迟串联的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。 错误地给 如果我收集它们并进行迭代,但是希望获得更多Java8-y,Streamy :-),可以这样做 注意 我不想压缩流 “ zip”操作将从每个集合中获取一个元素并将其组合。 压缩操作的

  • 问题内容: 交错两个(或多个)文本文件的行的最简单/最快的方法是什么?例: 文件1: 档案2: 交错式: 当然,编写一个可以同时打开它们和执行任务的Perl脚本很容易。但是我想知道是否有可能用更少的代码摆脱困境,也许是使用Unix工具的单行代码? 问题答案:

  • 问题内容: 我正在尝试了解go的内部原理。考虑以下代码 上面的代码完美地交换了2个数字,a变成5,b变成10。我无法理解它是如何工作的。在第二行代码中考虑,如果将a首先分配给b,则b将为10。现在,如果将b分配给a,那么a也不应也为10。 请帮助我了解它是如何工作的 谢谢 问题答案: TL; DR :反汇编表明CPU必须足够聪明才能看到正在发生的事情,并使用寄存器来避免覆盖内存中的现有值。 这个问

  • 我正在尝试使用CSS或jQuery在两个图像之间不断切换。我的工作还可以,但它基本上是把一个图像放在另一个上面,如果我使用的图像是透明的,这会引起问题。 null null 代码编号:https://codepen.io/rhys_eng/pen/nwdwxao

  • 在各种情况下,我多次面对这个问题。它对所有编程语言都是通用的,尽管我对C或Java很满意。 我希望避免一个数组在另一个数组中重复迭代,这将增加执行时间(长度A乘以长度B),这在巨大数组的情况下是太多了。 我们有没有办法在每一个数组中做一次传递来获得公共元素?