Ios 阵列图,Swift

Ios 阵列图,Swift,ios,arrays,swift,dictionary,nscoding,Ios,Arrays,Swift,Dictionary,Nscoding,我有一个自定义的规则类 class Rules: NSCoding { var x: String? var y: Double? override func mapping(map: Map) { self.x <- map["x"] self.y <- map["y"] } 这(我猜)的问题是,我的规则对象有一些重复的字符串,有时甚至比我在xValues数组中的字符串还要多。(我可能在其他地方做错了什么…) 我需要的是传递三个字符串,和一个不

我有一个自定义的规则类

class Rules: NSCoding {

var x: String?
var y: Double?

override func mapping(map: Map) {
    self.x     <- map["x"]
    self.y     <- map["y"]
}
这(我猜)的问题是,我的规则对象有一些重复的字符串,有时甚至比我在xValues数组中的字符串还要多。(我可能在其他地方做错了什么…)


我需要的是传递三个字符串,和一个不同的数字Double,比如说6 Double

为什么不在创建规则之前删除重复项

定义常规扩展以删除重复项:

扩展RangeReplaceableCollection{
func removingDuplicates(键路径:键路径)->Self
其中E:Hashable
{
var seen=Set()
已看到。保留容量(计数)
var new=自我
new.removeAll{element->Bool-in
包含(元素[keyPath:path]){
返回真值
}否则{
seen.insert(元素[keyPath:path])
返回错误
}
}
还新
}
}
然后在压缩之前删除重复项:

让xValues=[“String1”、“String2”、“String3”]。移除重复项(keyPath:\.self)
让yValue=[1.0,2.0,1.5,2.5,5.1,6.0,8.0]。移除重复项(键路径:\.self)
让rules=zip(xValues,yValues).map{
规则(x:$0.0,y:$0.1)
}

花絮:您不需要对
x
参数使用字符串插值,因为参数
$0.0
已经是
String

,因为
zip
只为两个输入数组都有值的索引返回元组,所以您需要一个填充较小数组的方法,如下所示:

func-zipFill(arr1[T],arr2[U])->[(T?,U?]{
设c1=arr1.count
设c2=arr2.count
让计数=最大值(c1,c2)
var结果=[(T?,U?)()
对于0中的i..=c1{
result.append((nil,arr2[i]))
}否则,如果i>=c2{
result.append((arr1[i],nil))
}
}
返回结果
}
设xValues=[“String1”、“String2”、“String3”]
让y值=[1.0,2.0,1.5,2.5,5.1,6.0,8.0]
让rules=zipFill(xValues,yValues).map{
规则(x:$0.0,y:$0.1)
}
打印(规则)
//[{x“String1”,y1},{x“String2”,y2},{x“String3”,y1.5},
//{x nil,y 2.5},{x nil,y 5.1},{x nil,y 6},{x nil,y 8}]

我应该是y:$1.0否?我收到以下错误:“Double”类型的值没有成员“0”,请尝试x:$0,y:$1直到有重复的内容。。。我无法显示输出,因为我将此对象传递给一个函数(如果我以不同的方式传递数据(无重复),则此函数可以工作),但这次我需要这样做…您能提供预期的输出吗?
let xValues = ["String1", "String2", "String3"]
let yValues = [1.0, 2.0, 1.5, 2.5, 5.1, 6.0, 8.0]

let rules = zip(xValues, yValues).map {
    Rules(x: "\($0.0)", y: $0.1)
}