根据其中一个数组

时间:2015-08-01 16:51:44

标签: arrays swift sorting

我正在创建一个新数组alph_hostArtists: [String],它按字母顺序对hostArtists进行排序。然后,我需要安排一个新数组alph_hostSongs,使每个“歌曲”的索引与hostArtistshostSongs中定义的每个“艺术家”匹配。我会使用字典,但问题是每个阵列中可能存在重复的歌曲和艺术家,它们不共享相同的艺术家/歌曲。

var hostArtists: [String] = ["z", "a", "d", "d", "1"]
var hostSongs: [String] = ["bb", "yy", "cc", "56", "bb"]
var alph_hostSongs: [String] = hostSongs.sorted
{
    $0.localizedCaseInsensitiveCompare($1) ==  NSComparisonResult.OrderedAscending
}

2 个答案:

答案 0 :(得分:3)

要直接在swift 1.0中回答您的问题,您可以进行压缩,排序和映射。

var alph_hostSongs: [String] = Array(Zip2(hostArtists, hostSongs)).sorted {
    $0.0.localizedCaseInsensitiveCompare($1.0) == NSComparisonResult.OrderedAscending
}.map {
    return $0.1
}

真正的答案是创建一个结构来保存艺术家和歌曲。这样他们总是联系在一起。

答案 1 :(得分:0)

试试这个:

for newIndex in 0...alph_hostArtists - 1 {
    for origIndex in 0...hostArtists - 1 {
        if hostArtists[origIndex] == alph_hostArtists[newIndex] {
            alph_hostSongs.append(hostSongs[origIndex])
        }
    }
}

它的作用是找到新数组的元素来自旧集合的索引,然后将其附加到新集合。请注意,如果同一位艺术家有多首歌曲(将会有),歌曲将按照字母顺序排列,但按照输入的顺序排列