Это в основном делает то, что делает @ Bass33, за исключением того, что я также даю возможность использовать отрицательный индекс для подсчета с конца.
// use a negative index to insert relative to the end of the string.
String.prototype.insert = function (index, string) {
var ind = index < 0 ? this.length + index : index;
return this.substring(0, ind) + string + this.substring(ind, this.length);
};
Use case: Предположим, вы имеете полноразмерные изображения, используя соглашение об именах, но не можете обновлять данные, чтобы также предоставлять эскизы эскизов.
var url = '/images/myimage.jpg';
var thumb = url.insert(-4, '_thm');
// result: '/images/myimage_thm.jpg'
Если оба массива имеют ту же длину , то это возможное решение:
let one = [1,3,5]
let two = [2,4,6]
let merged = zip(one, two).flatMap { [$0, $1] }
print(merged) // [1, 2, 3, 4, 5, 6]
Здесь zip()
перечисляет массивы параллельно и возвращает последовательность пар ( 2-элементные кортежи) с одним элементом из каждого массива. flatMap()
создает 2-элементный массив из каждой пары и конкатенирует результат.
Если массивы могут иметь разную длину , то вы добавляете дополнительные элементы более длинного массива в результат:
func mergeFunction<T>(one: [T], _ two: [T]) -> [T] {
let commonLength = min(one.count, two.count)
return zip(one, two).flatMap { [$0, $1] }
+ one.suffixFrom(commonLength)
+ two.suffixFrom(commonLength)
}
Обновление для Swift 3:
func mergeFunction<T>(_ one: [T], _ two: [T]) -> [T] {
let commonLength = min(one.count, two.count)
return zip(one, two).flatMap { [$0, $1] }
+ one.suffix(from: commonLength)
+ two.suffix(from: commonLength)
}
Если вы просто хотите чередовать два массива, вы можете просто сделать что-то вроде:
let maxIndex = max(one.count, two.count)
var mergedArray = Array<T>()
for index in 0..<maxIndex {
if index < one.count { mergedArray.append(one[index]) }
if index < two.count { mergedArray.append(two[index]) }
}
return mergedArray
flatMap
не создает «кортеж».zip
создает кортежи; по сути, он дает массив кортежей.flatMap
flattens! Простойmap
даст[[1, 2], [3, 4], [5, 6]]
;flatMap
удаляет лишний уровень массива. – matt 22 January 2016 в 19:31flatMap
"конкатенирует результат" и в то же время удаляет тот массив, который он создал, оставляя только два элемента. Это изобретательность вашего решения. Конечно, я сразу же подумал оzip
и надеялся, что вы его примете, но то, что вы здесь делаете, блестящее, делает небольшой массив, чтобы снова уничтожить его. Вы проходите через маленький массив как способ удаления кортежа кортежа, оставляя только два элемента. – matt 22 January 2016 в 20:34