代码之家  ›  专栏  ›  技术社区  ›  Dani iman kazemayni

从数组中删除重复的相集?

  •  0
  • Dani iman kazemayni  · 技术社区  · 6 年前

    我正在使用第三方库 BSImagePicker 从照片库中选择多个图像。我可以设置最大值 PHAssets 但当我显示 BSImagePickerController 选择更多照片。那些 相集 只是添加到 selectedAssets 几乎可以复制图像。我试图删除副本 PHAsset 和使用但不起作用的图像:

    extension Array where Element: Equatable {
    mutating func removeDuplicates() {
        var result = [Element]()
        for value in self {
            if !result.contains(value) {
                result.append(value)
            }
        }
        self = result
       }
    }
    
    func presentBSImagePickerController(vc: BSImagePickerViewController) {
            self.bs_presentImagePickerController(vc, animated: true,
                                                 select: { (asset: PHAsset) -> Void in
    
            }, deselect: { (asset: PHAsset) -> Void in
                // User deselected an assets.
    
            }, cancel: { (assets: [PHAsset]) -> Void in
                // User cancelled. And this where the assets currently selected.
    
            }, finish: { (assets: [PHAsset]) -> Void in
    
    
                // User finished with these assets
    
                for i in 0..<assets.count  {
                    self.selectedAssets.append(assets[i])
                }
                self.selectedAssets.removeDuplicates()
    
                self.convertAssetToImages()
    
            }, completion: nil)
        }
    
        func convertAssetToImages() -> Void {
    
            if selectedAssets.count != 0 {
    
                for i in 0..<selectedAssets.count {
    
                    let manager = PHImageManager.default()
                    let option = PHImageRequestOptions()
                    var thumbnail = UIImage()
                    option.isSynchronous = true
    
                    manager.requestImage(for: selectedAssets[i], targetSize: CGSize(width: 200, height: 200), contentMode: .aspectFill, options: option, resultHandler: {(result, info)->Void in
                        thumbnail = result!
    
                    })
    
                    let data = UIImageJPEGRepresentation(thumbnail, 0.7)
                    let newImage = UIImage(data: data!)
    
                    self.photosArray.append(newImage! as UIImage)
                    self.photosArray.removeDuplicates()
                    print(self.photosArray.removeDuplicates())
    
                    DispatchQueue.main.async {
                        self.collectionView.reloadData() // reloads the collection view on main thread
                    }
                }
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   matt    6 年前

    for i in 0..<assets.count  {
        self.selectedAssets.append(assets[i])
    }
    self.selectedAssets.removeDuplicates()
    

    removeDuplicates

    var ids = Set(self.selectedAssets.map {$0.localIdentifier})
    for asset in assets  {
        if !ids.contains(asset.localIdentifier) {
            ids.insert(asset.localIdentifier)
            self.selectedAssets.append(asset)
        }
    }
    

    contains