【问题标题】:How to sort a multidimensional character array alphabetically Swift如何按字母顺序对多维字符数组Swift进行排序
【发布时间】:2018-03-09 14:44:50
【问题描述】:

我正在尝试对一个包含随机字符的 [[Character]] 数组进行排序,使其全部按字母顺序排列。现在的前输出:

["H", "P", "C"]
["F", "K", "V"]
["J", "Y", "B"]

我需要它是这样的

["A", "B", "C"]
["D", "E", "F"]
["G", "H", "I"]

有什么想法吗?

【问题讨论】:

  • 如果 A 不在任何数组中,它怎么能成为第一?没有意义。
  • 这只是我需要的样本,我的意思是它应该按字母顺序排序
  • 不是样本。显示实际输入和实际所需输出。我们是程序员,不是读心者。 ——好吧……那有什么问题?将数组展平,排序,然后再次分成三部分。对你来说最困难的部分是什么?
  • 我没想到,谢谢!

标签: swift sorting multidimensional-array


【解决方案1】:

请检查:

let input = [["H", "P", "C"], ["F", "K", "V"], ["J", "Y", "B"], ["A", "L"]]
var sortedArray = input.flatMap({ $0 }).sorted()

var finalArray:[[String]]=[]
var subArray:[String]=[]
for i in 0..<sortedArray.count {
    subArray.append(sortedArray[i])
    if subArray.count == 3 || i == sortedArray.count-1 {
        finalArray.append(subArray)
        subArray = []
    }
}

print(finalArray) 
// Output : [["A", "B", "C"], ["F", "H", "J"], ["K", "L", "P"], ["V", "Y"]]

【讨论】:

    【解决方案2】:
    func flattenArray(nestedArray: [[Character]]) -> [[Character]]{
    
    var myFlattendArray = [Character]()
    var sortedArray = [[Character]]()
    
    for element in nestedArray{
        if element is [Character]{
            for char in element{
                myFlattendArray.append(char)
            }
        }
    }
    myFlattendArray = myFlattendArray.sorted(by: {$0 < $1})
    var arrayForArray = [Character]()
    for i in 0..<myFlattendArray.count{
       if((i % nestedArray.count == 0 && i != 0)){
            sortedArray.append(arrayForArray)
            arrayForArray.removeAll()
       }else if i == myFlattendArray.count - 1{
            arrayForArray.append(myFlattendArray[i])
            sortedArray.append(arrayForArray)
            arrayForArray.removeAll()
       }
       arrayForArray.append(myFlattendArray[i])
    
    }
       return sortedArray
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用 flatMap 来展平您的数组,对其进行排序,然后您可以使用此 answer 中的扩展名进行分组,如下所示:

      extension Array {
          func group(of n: IndexDistance) -> Array<Array> {
              return stride(from: 0, to: count, by: n)
                  .map { Array(self[$0..<Swift.min($0+n, count)]) }
          }
      }
      
      let arr = [["H", "P", "C"],
                 ["F", "K", "V"],
                 ["J", "Y", "B"]]
      
      let sorted = arr.flatMap{$0}.sorted().group(of: 3)
      sorted  // [["B", "C", "F"], ["H", "J", "K"], ["P", "V", "Y"]]
      

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        • 1970-01-01
        • 1970-01-01
        • 2014-12-30
        • 2011-10-31
        相关资源
        最近更新 更多