我有两个自定义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
以外newCarsArr
中allCarsArr
以外的所有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
?
答案 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)
作为使用集合的替代方法(符合CarStruct
到Hashable
),您可以满足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所述。