Swift: Java-эквивалент Arrays.copyOfRange для [UInt8] - PullRequest
0 голосов
/ 12 ноября 2018

Я перевожу Java-код в Swift, и я хочу знать, что эквивалентно Swift для Arrays.copyOfRange:

public static byte[] copyOfRange(byte[] original, int from, int to) 

для моего примера я хочу перевести следующую строку:

Arrays.copyOfRange(packet.value(), 2, packet.length())

Спасибо

Ответы [ 4 ]

0 голосов
/ 12 ноября 2018

Java copyOfRange также заполнит результирующий массив нулями, если верхнее значение диапазона больше длины массива. Эта функция также обрабатывает этот случай.

Эту функцию можно сделать общей. Это работает для любого типа, который соответствует ExpressibleByIntegerLiteral, который необходим для заполнения 0.

func copyOfRange<T>(arr: [T], from: Int, to: Int) -> [T]? where T: ExpressibleByIntegerLiteral {
    guard from >= 0 && from <= arr.count && from <= to else { return nil }

    var to = to
    var padding = 0

    if to > arr.count {
        padding = to - arr.count
        to = arr.count
    }

    return Array(arr[from..<to]) + [T](repeating: 0, count: padding)
}

Примеры:

let arr: [UInt8] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

if let result = copyOfRange(arr: arr, from: 0, to: 3) {
    print(result)  // [0, 1, 2]
}
if let result = copyOfRange(arr: arr, from: 7, to: 12) {
    print(result)  // [7, 8, 9, 0, 0]
}
0 голосов
/ 12 ноября 2018

Это должно определенно сработать:

    var array = [1,2,3,4,5,6,7,8,9]
    var partOfArray = array[5...8]
    print(partOfArray)
0 голосов
/ 12 ноября 2018

Ответ

    func getRange(arr: [UInt8], from: Int, to: Int) -> [UInt8]? {

    if from >= 0 && to >= from && to <= arr.count{

        return Array(arr[from..<to])
    }

    return nil
}
0 голосов
/ 12 ноября 2018

Вы можете попробовать

func getRange (arr:[Int],from:Int,to:Int) -> [Int]? {

  if from >= 0 && from < arr.count && to >= 0 && to < arr.count && from < to {

     return Array(arr[from...to])
  }

 return nil
}

Может написать

extension Array  {

    func getRenage (from:Int,to:Int) -> [Element]? {

        if from >= 0 && from < self.count && to >= 0 && to < self.count && from < to {

            return Array(self[from...to])
        }

        return nil
    }

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