Swift:如何获得两个struct-arrays之间的区别

时间:2016-03-27 13:55:28

标签: arrays swift struct filter

我有两个自定义struct-arrays ...

struct CarStruct {
    var name : String?
    var speed : Int?
}

var allCarsArr = [CarStruct]() // should contain a lot of CarStructs
var newCarsArr = [CarStruct]() // contains only a few

我想将newCarsArr添加到allCarsArr

但在此之前,我需要证明newCarsArr不包含已在allCarsArr中的结构。

那么我怎样才能获得structs以外newCarsArrallCarsArr以外的所有Sub CompareSingleRange() Dim rangeToUse1 As Range, rangeToUse2 As Range, cell1 As Range, cell2 As Range ' Assume Selection is contiguous Set rangeToUse1 = Selection Set rangeToUse2 = Selection For Each cell1 In rangeToUse1 For Each cell2 In rangeToUse2 If cell1.Value = cell2.Offset(1,0).Value Then cell1.Interior.ColorIndex = 38 End If Next cell2 Next cell1 End Sub

2 个答案:

答案 0 :(得分:4)

您应该将$("#rss-styled").rss("http://www.recruiter.com/feed/career.xml", { limit: 5, offsetStart: 5, layoutTemplate: '<dl class="dl-horizontal">{entries}</dl>', entryTemplate: '<dt><a href="{url}">{title}</a></dt><dd>{shortBodyPlain} [{author}@{date}]</dd>' }).show(); 协议添加为您班级的扩展程序。这是一篇很好的文章解释它:

Every Value Type Should Be Equatable

然后您可以将两个数组添加到Set中,它自然会排除重复项。您还需要遵守Equatable才能将值放入Set中,但有一个简单的方法是将值转换为字符串并获取Hashable

hashValue

答案 1 :(得分:2)

作为使用集合的替代方法(符合CarStructHashable),您可以满足Equatable的一致性,只需检查allCarsArr是否有每辆车的重复项要从newCarsArr添加。

/* (example of) conformance to Equatable */
func == (lhs: CarStruct, rhs: CarStruct) -> Bool {
    return lhsName == rhsName && lhsSpeed == rhsSpeed
}

struct CarStruct : Equatable {
    var name : String?
    var speed : Int?
}

var allCarsArr = [CarStruct]()
var newCarsArr = [CarStruct]()

allCarsArr.append(CarStruct(name: "Volvo", speed: 42))
allCarsArr.append(CarStruct(name: "BMW", speed: 50))
newCarsArr.append(CarStruct(name: "BMW", speed: 80))
newCarsArr.append(CarStruct(name: "BMW", speed: 50)) // <-- duplicate

/* Add only cars from newCarsArr to allCarsArr if they don't 
   exist, priorly, in the latter */
newCarsArr.forEach { allCarsArr.contains($0) ? () : allCarsArr.append($0) }

但是,如果使用大型数组,唯一性的更好选择可能是使用Hashable的一致性并使用集合或字典(如上所述,如果allCarsArr变得非常大,可能会产生不必要的开销),如in Kenneth Bruno:s solution above所述。