Свифт 4, как удалить двух n-ых фрахтователей из предложения и начать считать каждую букву в предложении с 1 вместо 0 - PullRequest
0 голосов
/ 13 октября 2018

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

Examplre user enters in each textfield as following:
textfield.text: Hi, thankyou 
inputlabelOne.text: 2
inputLabelTwo.text: 5       

Мой код:

var numberOne = Int (InputLabelOne.text)!
var numberTwo =  Int (InputLabelTwo.text)!
var text   =  textfield.text!
var num1 = numberOne
var num2 = numberTwo                 

if let oneIndex = text.index ((text.startIndex), offsetBy: 
              num1, limetedBy:(text.endIndex)) , 
              let twoIndex = text.index ((text.startIndex), offsetBy: num2, 
              limetedBy:(text.endIndex))  {

    text.remove(at: oneIndex)
    text.remove(at: twoIndex)
    outputLabel.Text = "sentence with removed letters: \(text)"       
}

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Чтобы избежать мутации при повторении итерации , необходимо удалить символы в обратном направлении , начиная с самого высокого индекса.

Чтобы получить индексы на основе 1, просто вычтите 1от смещения соответственно

var text = "Hi, thankyou"
let inputLabelOne = 2
let inputLabelTwo = 5

if let oneIndex = text.index(text.startIndex, offsetBy: inputLabelOne - 1, limitedBy: text.endIndex),
    let twoIndex = text.index(text.startIndex, offsetBy: inputLabelTwo - 1, limitedBy: text.endIndex) {
    text.remove(at: twoIndex)
    text.remove(at: oneIndex)
}

print(text) // H, hankyou

или как функция

func remove(at indices: [Int], from text: inout String) {
    let sortedIndices = indices.sorted(by: >)
    for index in sortedIndices {
        if let anIndex = text.index(text.startIndex, offsetBy: index - 1, limitedBy: text.endIndex) {
            text.remove(at: anIndex)
        }
    }
}

remove(at: [inputLabelOne, inputLabelTwo], from: &text)
0 голосов
/ 13 октября 2018

Во-первых, вам нужно получить первый индекс строки

let startIndex = string.startIndex

Далее вам нужно получить String.Index символа в первой позиции

let index1 = string.index(startIndex, offsetBy: num1 - 1)

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

Далее вы можете удалить этот символ

str.remove(at: index1)

То же самое для второго символа

let offset = num1 > num2 ? 1 : 2
let index2 = string.index(startIndex, offsetBy: num2 - offset)
str.remove(at: index2)

Если num1 меньше, чем num2, тозначение смещения равно 2, потому что мы уже удалили один символ.Если num1 больше, чем num2, то значение смещения равно 1, как для num1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...