将项目插入空数组

时间:2016-02-13 05:09:43

标签: arrays swift swift2

我不完全确定这是否可行..我开始使用空数组。我有一个每个都有不同数字的tableview。当用户单击一个单元格时,所选的数字将附加到数组中。

现在,我面临的问题是用户可以按任意顺序点击任何单元格,但我需要对我的数组进行排序,以便单元格1与索引1匹配,单元格2与索引2匹配,依此类推。

我到目前为止所尝试的是追加。但是这会无序地插入数字。我已经尝试过插入,但是在第一次选择表明索引超出范围后会抛出错误。

编辑:

我有一个带数字的tableView,按数字顺序排列:1,2,3,4 ...用户点击一个数字,该数字被附加到数组中。

用户可以按任意顺序选择任何数字,例如:1,3,4,2 ..我最终会得到一个[1,3,4,2]数组。我需要订购数字,以便如果用户选择3,它将最终在数组的第三个索引中。

感谢任何帮助

6 个答案:

答案 0 :(得分:1)

Array' appendsort函数应该可以正常使用您所描述的内容:

// Use `var`, not `let` - you're going to change this value over time!
var tappedNumbers: [Int] = []

// You can then append numbers in order, like this:
tappedNumbers.append(2)
tappedNumbers.append(5)
tappedNumbers.append(1)

tappedNumbers.sort() // this returns the array [1, 2, 5]


// If you don't want duplicates, try using Set instead of Array:
var tappedSet: Set<Int> = []
tappedSet.insert(2)
tappedSet.insert(5)
tappedSet.insert(1) 
tappedSet.insert(5) // see, we're double-inserting 5 here...

tappedSet.count // returns 3, because there are only 3 unique entries

tappedSet.sort() // returns [1, 2, 5]

将此代码放入Swift Playground并自行尝试 - 这是您所描述的内容吗?

答案 1 :(得分:0)

您可以尝试从一组Value:- **YOUR JDK PATH UPTO BIN FOLDER** , AT END ";" 个对象开始,这些对象的大小与表视图中的行数相同。然后,当用户选择行时,将该索引处的NSNull替换为所选数字。

NSNullhttps://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNull_Class/

答案 2 :(得分:0)

假设您要求的是一种将单元格索引与单元格值相关联的方法,那么您应该做什么。不要使用单元格中单元格位置的值作为单元格索引,而是使用包含单元格索引和单元格值的字典或元组数组。这是一个例子:

var myDict = Dictionary<Int,Int>()

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cellvalue = tableView.cellForRowAtIndexPath(indexPath)!.textLabel!.text
    myDict.append((index: indexPath.row, value: cell value))

} 

或使用元组:

typealias myTuple = (index: Int, value: Int)
var myTupleArray = Array<myTuple>()

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    let cellvalue = tableView.cellForRowAtIndexPath(indexPath)!.textLabel!.text
    myDict.append((index: indexPath.row, value: cell value))

} 

答案 3 :(得分:0)

对于寻找答案的任何人..下面的代码将创建一个包含4个nil占位符的数组。

var array = [Int?](count: 4, repeatedValue: nil)

以所使用的正确索引获取所选项目

array[indexPath.row] = tableView.cellForRowAtIndexPath(indexPath)!.textLabel!.text

答案 4 :(得分:0)

我同意@bryanjclark。

我不确定创建一个充满'nil'的数组(正如你在自己的答案中所建议的那样)是理想的解决方案。

再次,正如@bryanjclark建议的那样,我会使用Set

var indexSet:Set<Int> = []

// click on index 1
indexSet.insert(1)
// click on index 5
indexSet.insert(5)

// get all clicked cell indexes back in order
let sortedIndexes = indexSet.sort()

// check if a index is in the clicked set
if indexSet.contains(3) {
    print("contains")
} else {
    print("does not contain")
}

答案 5 :(得分:0)

我不确定你将如何使用你的阵列,但我不建议你使用你自己的答案。

您可以使用Dictionary

,而不是创建固定大小的数组
var dict: [Int: Int] = [:]

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    dict[indexPath.row +1] = indexPath.row + 1
}