Я использую zip
на двух массивах кортежей. Когда я повторяю результат, кортеж результата содержит кортежи только с левой стороны.Swift zip-генератор только итерации с одной стороны дважды
Интересно, что Array(zip(...))
производит коллекцию, как ожидалось. Я хочу сохранить несколько циклов и памяти и предпочитаю не генерировать новый массив только ради цикла.
let expectation: [(String, UInt)] = [("bar", 0)]
let comparison: [(String, Int)] = [("foo", 0)]
func ==(lhs: [(String, UInt)], rhs: [(String, Int)]) -> Bool {
if lhs.count != rhs.count {
return false
}
for (l, r) in zip(lhs, rhs) {
// Looking at `l` and `r` in lldb shows both are the same.
if l.0 != r.0 || Int(l.1) != r.1 {
return false
}
}
return true
}
let equals = (expectation == comparison) // true?!?!
Этот метод предназначен для сравнения записей вызовов функций в двойном тестовом режиме для проверки данных из реальных тестовых случаев. Двойные записи (String, UInt)
, набирая кортежи в тестовых примерах, производит (String, Int)
, поэтому я подумал: давайте создадим легкую функцию равенства! Изменение UInt
до Int
ничего не меняет.
Как это сделать? Renders zip довольно бесполезен для меня (за исключением случаев, когда вы можете объяснить, что происходит).
Ну хорошо, так что я подал свой первый отчет об ошибке , great :) rdar: // 21096510 – ctietze