Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Swift:如何按特定顺序将项目插入阵列?_Arrays_Swift - Fatal编程技术网

Arrays Swift:如何按特定顺序将项目插入阵列?

Arrays Swift:如何按特定顺序将项目插入阵列?,arrays,swift,Arrays,Swift,我想在Swift中的特定索引处插入项目。但出现错误:索引超出范围 var a = [String]() a.insert("a", atIndex: 3) a.insert("b", atIndex: 1) a.insert("c", atIndex: 0) a.insert("d", atIndex: 2) print(a) 如果我必须按顺序使用append或insert,它将打破我想要的顺序。您正在尝试在索引3的空数组中插入一个项。这导致了崩溃 您可能需要使用默认值初始化数组: var a

我想在Swift中的特定索引处插入项目。但出现错误:
索引超出范围

var a = [String]()
a.insert("a", atIndex: 3)
a.insert("b", atIndex: 1)
a.insert("c", atIndex: 0)
a.insert("d", atIndex: 2)
print(a)

如果我必须按顺序使用append或insert,它将打破我想要的顺序。

您正在尝试在索引3的空数组中插入一个项。这导致了崩溃

您可能需要使用默认值初始化数组:

var a = Array<String>(count: 10, repeatedValue: "")
a.insert("a", atIndex: 3)
print(a)
var a=Array(计数:10,repeatedValue:)
a、 插入(“a”,索引:3)
印刷品(a)
但您不是在插入,而是在修改值,因此可以通过以下方式实现相同的效果:

var a = Array<String>(count: 10, repeatedValue: "")
a[3] = "a"
print(a)
var a=Array(计数:10,repeatedValue:)
a[3]=“a”
印刷品(a)

您试图在索引3处的空数组中插入一个项。这导致了崩溃

您可能需要使用默认值初始化数组:

var a = Array<String>(count: 10, repeatedValue: "")
a.insert("a", atIndex: 3)
print(a)
var a=Array(计数:10,repeatedValue:)
a、 插入(“a”,索引:3)
印刷品(a)
但您不是在插入,而是在修改值,因此可以通过以下方式实现相同的效果:

var a = Array<String>(count: 10, repeatedValue: "")
a[3] = "a"
print(a)
var a=Array(计数:10,repeatedValue:)
a[3]=“a”
印刷品(a)
如果您想使用数组,@fiks的回答确实解释了问题和正确的解决方案

字典 由于您想执行随机插入,所以使用
Dictionary
而不是使用
Array
似乎是一个更灵活的选择

var dict: [Int:String] = [:]
dict[3] = "a"
dict[1] = "b"
dict[0] = "c"
dict[2] = "d"

print(dict) // [2: "d", 3: "a", 1: "b", 0: "c"]
print(dict.sort { $0.0.0 < $0.1.0}.map { $0.1 } ) // ["c", "b", "d", "a"]
var dict:[Int:String]=[:]
dict[3]=“a”
dict[1]=“b”
dict[0]=“c”
dict[2]=“d”
印刷体(dict)/[2:d,3:a,1:b,0:c”]
打印(dict.sort{$0.0.0<$0.1.0}.map{$0.1})/[“c”、“b”、“d”、“a”]
如果您想使用数组,@fiks的回答确实解释了问题和正确的解决方案

字典 由于您希望执行随机插入,因此使用
字典
而不是
数组
似乎是一个更灵活的选择

var dict: [Int:String] = [:]
dict[3] = "a"
dict[1] = "b"
dict[0] = "c"
dict[2] = "d"

print(dict) // [2: "d", 3: "a", 1: "b", 0: "c"]
print(dict.sort { $0.0.0 < $0.1.0}.map { $0.1 } ) // ["c", "b", "d", "a"]
var dict:[Int:String]=[:]
dict[3]=“a”
dict[1]=“b”
dict[0]=“c”
dict[2]=“d”
印刷体(dict)/[2:d,3:a,1:b,0:c”]
打印(dict.sort{$0.0.0<$0.1.0}.map{$0.1})/[“c”、“b”、“d”、“a”]

代码的问题是
insert
的第二个参数必须小于或等于数组的
endIndex

如果要将索引3处的元素插入到长度为零的数组中,则不能!因为如果在索引3处有一个元素,那么在索引0、1、2处也必须有一个元素!这就是数组的工作原理:它是顺序的

我猜您希望索引0、1和2处的元素成为某个默认值。然后使用这个扩展名

extension Array {
    mutating func insert(element: Element, atIndex index: Int, withDefaultValue value: Element) {
        if self.endIndex < index {
            let diff = index - endIndex
            for _ in 0...diff {
                self.append(value)
            }
            self[endIndex - 1] = element
        } else {
            insert(element, atIndex: index)
        }
    }
}
扩展数组{
mutating func insert(元素:元素,索引:Int,withDefaultValue:element){
如果self.endIndex
这几乎是不言自明的


这也可能是XY问题。为此,您可能只需要一个
[Int:String]
。但是没有进一步的信息,我不知道。

您的代码的问题是
insert
的第二个参数必须小于或等于数组的
endIndex

如果要将索引3处的元素插入到长度为零的数组中,则不能!因为如果在索引3处有一个元素,那么在索引0、1、2处也必须有一个元素!这就是数组的工作原理:它是顺序的

我猜您希望索引0、1和2处的元素成为某个默认值。然后使用这个扩展名

extension Array {
    mutating func insert(element: Element, atIndex index: Int, withDefaultValue value: Element) {
        if self.endIndex < index {
            let diff = index - endIndex
            for _ in 0...diff {
                self.append(value)
            }
            self[endIndex - 1] = element
        } else {
            insert(element, atIndex: index)
        }
    }
}
扩展数组{
mutating func insert(元素:元素,索引:Int,withDefaultValue:element){
如果self.endIndex
这几乎是不言自明的


这也可能是XY问题。为此,您可能只需要一个
[Int:String]
。但是没有进一步的信息,我不知道。

我想这应该是答案!!我知道。我试过了<代码>数组(计数:10,重复值:nil)
QuotesModel是数据模型。错误是:
表达式类型“Array”在没有更多上下文的情况下是不明确的
您的“QuotesModel”是如何定义的?您可能还需要使用选项对其进行初始化:
数组(计数:10,重复值:nil)
我已经用您的方法进行了测试,但它仍然不起作用。这个问题已经解决了,但我仍然不理解insert-at-index机制<代码>变量a=[String?](计数:4,重复值:nil)a.insert(“a”,atIndex:3)a.insert(“b”,atIndex:1)a.insert(“c”,atIndex:0)a.insert(“d”,atIndex:2)print(a)
我已经测试了这段代码,它打印了8个元素,它没有覆盖我想要的索引项,我想这应该是答案吧!!我知道。我试过了<代码>数组(计数:10,重复值:nil)QuotesModel是数据模型。错误是:
表达式类型“Array”在没有更多上下文的情况下是不明确的
您的“QuotesModel”是如何定义的?您可能还需要使用选项对其进行初始化:
数组(计数:10,重复值:nil)
我已经用您的方法进行了测试,但它仍然不起作用。这个问题已经解决了,但我仍然不理解insert-at-index机制<代码>变量a=[String?](计数:4,重复值:nil)a.insert(“a”,atIndex:3)a.insert(“b”,atIndex:1)a.insert(“c”,atIndex:0)a.insert(“d”,atIndex:2)print(a)我已经测试了这段代码,它打印了8个元素,它没有覆盖我想要的索引项