Добавить символ в альтернативном формате - PullRequest
0 голосов
/ 09 мая 2019

У меня есть две строки, которые мне нужно объединить.Но я должен слить, как показано ниже.

var a = "abc"
var b = "def"

Мне нужно сделать так: adbecf.

Просто обычный a + b с некоторым условием, которое я пробовал.Но не в состоянии решить.Есть идеи?

обновление:

let stringA = "abc"
 let stringB = "def"


func mergeStrings(a: String, b: String) -> String {

    let val = zip(a,b).reduce("") { (result, arg1) in
    let (char1, char2) = arg1
    return result + "\(char1)\(char2)"
}
return val
}

Ответы [ 2 ]

2 голосов
/ 09 мая 2019
let a = "abc"
let b = "def"
let c = zip(a,b).reduce("") { (result, arg1) in
    let (char1, char2) = arg1
    return result + "\(char1)\(char2)"
}
print(c)//adbecf

короче

let c = zip(a,b).reduce("") { $0 + "\($1.0)\($1.1)" }
print(c)

Использование zip (: :) с двумя строками неравной длины приведет к игнорированию оставшихся строк.

let a = "12345"
let b = "67"
let c = zip(a,b).reduce("") { $0 + "\($1.0)\($1.1)" }
print(c)//"1627"--> 345 is ignored

Чтобы исправить это, используйте

if a.count > b.count {
    c = c + String(a[b.endIndex...])
} else if b.count > a.count {
    c = c + String(b[a.endIndex...])
}
print(c)//"1627345"
1 голос
/ 09 мая 2019

Этот код обрабатывает слияние строк одинаковой длины, а также строк неравной длины либо внутри цикла a длиннее, либо в конце, если b длиннее

var out = ""
for (n, c) in a.enumerated() {
    out.append(c)
    if n < b.count {
        out.append(b[b.index(b.startIndex, offsetBy: n)])
    }
}
if b.count > a.count {
    out += b.suffix(a.count)
}

Чтобы игнорировать любые завершающие символы

var out = ""
for (n, c) in a.enumerated() {
    if n < b.count {
        out.append(c)
        out.append(b[b.index(b.startIndex, offsetBy: n)])
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...