gpt4 book ai didi

arrays - 将值放入具有相同值的数组中

转载 作者:行者123 更新时间:2023-11-28 07:12:39 26 4
gpt4 key购买 nike

我是 swift 的新手,我正在开发带有 Collection View 的应用程序。我喜欢在同一部分中订购具有相同标签的所有图像。所以我必须有带有相同标签的图像的数组。具有以下值的示例主数组:

  • 带有标签a的Image1
  • 带有标签 b 的图片 2
  • 带有标签b的Image3
  • 带有标签a的Image4
  • 带有标签 c 的 Image5
  • ...

因此我喜欢有以下数组:一个带有标签 a 和一个带有标签 b 的数组,依此类推。

我找到了一个函数(感谢 stackoverflow)从主数组中获取所有不同的值。我已将其用于部分数量。如下:

 func uniq<S: SequenceType, E: Hashable where E==S.Generator.Element>(seq: S) -> [E] {
var seen: [S.Generator.Element:Int] = [:]
return filter(seq) { seen.updateValue(1, forKey: $0) == nil }
}

我知道你必须通过主数组。我一直在思考这个问题,但我找不到一个很好的解决方案,除了这个不起作用的代码

var distinctArray=uniq(main_array)

//CREATE ARRAYS FOR ALL DISTINCT VALUES
for var index = 0; index < distinctArray.count; index++ {
var "\(distinctArray[index])" = []
//I KNOW THIS WILL NOT WORK BUT HOW DO YOU DO THIS, GIVE AN ARRAY A NAME OF A VALUE OF AN ARRAY?
}

//GOING THROUGH THE ARRAY AND ADD THE VALUE TO THE RIGHT ARRAY
for var index = 0; index < main_array.count; index++ {
for var index2 = 0; index2 < distinctArray.count; index2+=1{
if main_array[index]==distinctArray[index2]{
"\(distinctArray[index])".append(main_array[index])
}
}
}

有人可以给我提示吗?也许我在使用以前的非工作代码时走错了路。

最佳答案

看起来你想要的是创建一个新字典,键是标签,数组是带有该标签的图像:

struct Image {
let name: String
let tag: String
}

let imageArray = [
Image(name: "Image1", tag: "a"),
Image(name: "Image2", tag: "b"),
Image(name: "Image3", tag: "b"),
Image(name: "Image4", tag: "a"),
Image(name: "Image5", tag: "c"),
]

func bucketImagesByTag(images: [Image]) -> [String:[Image]] {
var buckets: [String:[Image]] = [:]
for image in images {
// dictionaries and arrays being value types, this
// is unfortunately not as efficient as it might be...
buckets[image.tag] = (buckets[image.tag] ?? []) + [image]
}
return buckets
}

// will return a dictionary with a: and b: having
// arrays of two images, and c: a single image
bucketImagesByTag(imageArray)

如果您想使其通用,您可以编写一个函数,该函数接受一个集合,一个函数确定要存储的键,并返回一个从键到元素数组的字典。

func bucketBy<S: SequenceType, T>(source: S, by: S.Generator.Element -> T) -> [T:[S.Generator.Element]] {
var buckets: [T:[S.Generator.Element]] = [:]
for element in source {
let key = by(element)
buckets[key] = (buckets[key] ?? []) + [element]
}
return buckets
}

// same as bucketImagesByTag above
bucketBy(imageArray) { $0.tag }

有趣的是,T 被用于键控返回的字典这一事实意味着 Swift 可以推断它必须是可哈希的,因此您不必像 uniq 那样显式要求它

关于arrays - 将值放入具有相同值的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com