2016-02-13 3 views
1

Я не совсем уверен, что это возможно. Я начинаю с пустого массива. У меня есть таблица с разными номерами. Когда пользователь нажимает на ячейку, выбранный номер добавляется в массив.Вставка элементов в пустой массив

Теперь проблема заключается в том, что пользователь может щелкнуть любую ячейку в любом порядке, но мне нужно, чтобы мой массив упорядочивался так, чтобы ячейка 1 соответствовала индексу 1, ячейка 2 соответствовала индексу 2 и т. Д. ,

То, что я пробовал до сих пор, добавляется. но это вставляет номера не в порядке. Я попытался вставить, но это вызывает ошибку после первого выбора, указав, что индекс вне диапазона.

редактировать:

У меня есть Tableview с числами в числовом порядке: 1, 2, 3, 4 ... пользователь щелкает число и это число приложенных к массиву.

Пользователь может выбрать любое число в любом порядке, например: 1, 3, 4, 2 .. И я получаю массив из [1,3,4,2]. Мне нужно, чтобы числа были заказаны так, чтобы, если бы пользователь выбрал 3, он попал бы в третий индекс массива.

любая помощь

+0

Показать код. – Shripada

+0

Пожалуйста, разместите свой код. Также не уверен, что я понимаю этот вопрос. Вы пытаетесь получить подсчет количества кликов по ячейке? –

+0

Ваш вопрос довольно запутанный прямо сейчас. Отправьте некоторый код, пожалуйста, чтобы мы могли понять, о чем вы спрашиваете. – brimstone

ответ

0

Я не совсем уверен, как вы собираетесь использовать свой массив, но я бы не рекомендовал использовать ваш собственный ответ.

Вместо создания массива фиксированного размера можно использовать Dictionary:

var dict: [Int: Int] = [:] 

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

Благодарим за помощь – bobdawg

0

Вы можете попробовать начать с массивом NSNull объектов, имеет тот же размер, как количество строк в вашем представлении таблицы. Затем, когда пользователь выбирает строки, замените NSNull на этот индекс выбранным номером.

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

+0

для создания массива 'NSNull', который имеет тот же размер, что и число строк, я бы сделал:' [NSNull, NSNull, NSNull, NSNull] '... если бы у моего tableview было 4 строки – bobdawg

+0

Это правильно –

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)) 

} 
1

Array «s append и sort функция должна работать только штраф за то, что вы описали:

// 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 и попробовать сами - это то, что вы описываете?

+0

I думаю, что OP хотел, чтобы индекс массива был таким же, как индекс ячейки, если так, то мой ответ - это то, что хотел OP. Думаю, – brimstone

+0

Я не могу понять, почему это было бы желательно или нужно - но, ¯ \ _ (ツ) _/¯ – bryanjclark

0

Для тех, кто ищет ответ. Код ниже создаст массив с заполнителями.

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

, чтобы получить выбранный элемент в правильный индекс Я использовал

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

+0

Я согласен повторить ниль не умный. Вместо этого я хочу повторить 0 – bobdawg

+0

В зависимости от того, как вы хотите использовать свой массив, может быть, мой ответ лучше. (В любом случае, это безопаснее) – Eendje

+1

Я думаю, что у @Eendje есть лучший ответ здесь, потому что то, что вы действительно хотите, - это отношение ключевого значения, а не упорядоченная коллекция. BTW, вы не должны делать 'cellForRowAtIndexPath (indexPath)!', Потому что этот метод иногда возвращает 'nil' (например, если ячейка не видна), и это приведет к сбою вашего приложения. –

0

Я согласен с @bryanjclark.

Я не уверен, что создание массива, заполненного «нолем» (как вы предлагаете в своем собственном ответе), является идеальным решением.

Опять же, как предлагает @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") 
} 
+0

Кажется, он хочет, чтобы значение соответствовало указательному пути, например. '[1, nil, nil, 4]'. – Eendje

+0

Возможно, это может быть то, что он хочет, но я не уверен, что это правильный способ закодировать его. Что делать, если в представлении таблицы есть 10 000 ячеек? Если массив содержит 10 000 значений «nil»? Возможно, использование наборов может достичь того же результата - и для кого-то (предположительно) нового для Свифта - возможно, это хорошо, чтобы бросить вызов их предположениям. –

+0

То, что словарь для;) – Eendje

Смежные вопросы