【问题标题】:How to merge and sort [["a","d","c"],["x,p,z"],["o,n,q"]] in swift 3 [duplicate]如何在swift 3中合并和排序[[“a”,“d”,“c”],[“x,p,z”],[“o,n,q”]] [重复]
【发布时间】:2017-10-23 19:07:57
【问题描述】:

我有三个数组,例如 ["a","d","c"] ["x,p,z"] ["o,n,q"]。我想将一个数组合并成一个数组,像这样 ["a","c","d","n","o","p","q","x","z"]并且必须对其进行排序。

我试过这样

var arr1 = ["a","x","d"]
let str2 = "byq".characters.map { String($0) } // Manually i did string to array conversion
var arr2 = Array(str2)
let str3 = "cmo".characters.map { String($0) } // Manually i did string to array conversion
var arr3 = Array(str3)

var formattedArr2: [String] = [(arr2.map{String($0)}).joined(separator: ",")]

func combineArrays<T>(arrays:[[T]]) -> [T] {
    let maxCount = arrays.reduce(0) {max($0, $1.count)}
    var result = [T]()

    for i in 0..<maxCount {
        for array in arrays {
            if i < array.count {
                result.append(array[i])
            }
        }
    }
    return result
}

print(combineArrays(arrays: [arr1,arr2,arr3]).sorted())

我得到的答案是["a","c","d","n","o","p","q","x","z"]。但我做错了。请任何人都可以提出将数组合并到单个数组中的想法

如何合并这个数组并从 [["a","d","c"],["x,p,z"],["o,n,q"]] 分割成单个字符?

【问题讨论】:

  • “我得到的答案是 [...] 我希望我得到它” - 你得到了正确的结果吗?在第一种情况下,问题的目的是什么,在后一种情况下,预期的输出是什么?
  • 输出是正确的,但我相信他要求的是一种简洁有效的方法来合并和排序数组。
  • @chris - 是的,克里斯。我做了什么,我将字符串转换为数组并合并它。但我想将数组转换为数组到单个数组
  • @vadian - 为什么你提到这个问题是重复的?如果重复意味着您可以使用原始问题解决此问题吗????
  • 副本向您展示了将数组合并到单个数组中的方法。好的,没有提到排序,但您的问题中得到了正确的排序。

标签: ios arrays swift


【解决方案1】:

你在寻找这样的东西吗?

let sortedArray = [arr1, arr2, arr3].flatMap { $0 }.sorted()

编辑:或者这个?

let sortedArray = ([["a","d","c"],["x,p,z"],["o,n,q"]].flatMap { $0 } as [String]).flatMap { $0.split(separator: ",")}.sorted()

编辑(结果相同,但海报更喜欢):

let sortedArray = ([["a","d","c"],["x,p,z"],["o,n,q"]].flatMap { $0 } as [String]).flatMap { $0.components(separatedBy: ",") }.sorted()

【讨论】:

  • 感谢您的快速回复。它将像 ["a","c","d","o,n,q","x,p,z"] 一样工作。但我期望的是 ["a","c","d","n","o","p","q","x","z"]
  • 让 adc = [ "a", "d", "c" ] 让 xpz = [ "x", "p", "z" ] 让 onq = [ "o", "n ", "q" ] var val = adc + xpz + onq val = val.sorted() 这应该可以。
  • @Sabs 你看到我的编辑了吗?这是否更接近您正在寻找的东西?
  • @MatusalemMarques 没有 matusalemMarques。我得到的输出为 ["a","c","d","o,n,q","x,p,z"]。但我的预期输出是 ["a","c","d","n","o","p","q","x","z"]
  • @Sabs 尝试第二个示例?你确定吗?我得到你想要的确切输出。除了我忘记但添加起来很简单的排序。
猜你喜欢
  • 2021-04-25
  • 2020-05-13
  • 2021-09-06
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2011-10-03
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多