tiempo recorrer multidimensional mismo manejo elementos comparar bidimensional asociativo arreglo array arrays swift iteration

arrays - mismo - recorrer array multidimensional php



Iterar sobre dos matrices simultáneamente (7)

Con Swift 5, puede usar uno de los 4 siguientes códigos de Playground para resolver su problema.

# 1 Usando la función zip(_:_:)

En el caso más simple, puede usar zip(_:_:) para crear una nueva secuencia de pares (tuplas) de los elementos de sus matrices iniciales.

let strArr1 = ["Some1", "Some2", "Some3"] let strArr2 = ["Somethingelse1", "Somethingelse2"] let sequence = zip(strArr1, strArr2) for (el1, el2) in sequence { print("/(el1) - /(el2)") } /* prints: Some1 - Somethingelse1 Some2 - Somethingelse2 */

# 2 Usando el método makeIterator() Array y un ciclo while

También es fácil recorrer en bucle dos matrices simultáneamente con un simple while y iteradores:

let strArr1 = ["Some1", "Some2", "Some3"] let strArr2 = ["Somethingelse1", "Somethingelse2"] var iter1 = strArr1.makeIterator() var iter2 = strArr2.makeIterator() while let el1 = iter1.next(), let el2 = iter2.next() { print("/(el1) - /(el2)") } /* prints: Some1 - Somethingelse1 Some2 - Somethingelse2 */

# 3 Usar un tipo personalizado que se ajuste a IteratorProtocol

En algunas circunstancias, es posible que desee crear su propio tipo que empareje los elementos de sus matrices iniciales. Esto es posible haciendo que su tipo se ajuste a IteratorProtocol . Tenga en cuenta que al hacer que su tipo también se ajuste al protocolo de Sequence , puede usar instancias de él directamente en un bucle for:

struct TupleIterator: Sequence, IteratorProtocol { private var firstIterator: IndexingIterator<[String]> private var secondIterator: IndexingIterator<[String]> init(firstArray: [String], secondArray: [String]) { self.firstIterator = firstArray.makeIterator() self.secondIterator = secondArray.makeIterator() } mutating func next() -> (String, String)? { guard let el1 = firstIterator.next(), let el2 = secondIterator.next() else { return nil } return (el1, el2) } } let strArr1 = ["Some1", "Some2", "Some3"] let strArr2 = ["Somethingelse1", "Somethingelse2"] let tupleSequence = TupleIterator(firstArray: strArr1, secondArray: strArr2) for (el1, el2) in tupleSequence { print("/(el1) - /(el2)") } /* prints: Some1 - Somethingelse1 Some2 - Somethingelse2 */

# 4. Usando AnyIterator

Como alternativa al ejemplo anterior, puede usar AnyIterator . El siguiente código muestra una posible implementación dentro de un método de extensión Array :

extension Array { func pairWithElements(of array: Array) -> AnyIterator<(Element, Element)> { var iter1 = self.makeIterator() var iter2 = array.makeIterator() return AnyIterator({ guard let el1 = iter1.next(), let el2 = iter2.next() else { return nil } return (el1, el2) }) } } let strArr1 = ["Some1", "Some2", "Some3"] let strArr2 = ["Somethingelse1", "Somethingelse2"] let iterator = strArr1.pairWithElements(of: strArr2) for (el1, el2) in iterator { print("/(el1) - /(el2)") } /* prints: Some1 - Somethingelse1 Some2 - Somethingelse2 */

Soy nuevo en Swift. He estado haciendo programación Java. Tengo un escenario para codificar en Swift.

El siguiente código está en Java. Necesito codificar en Swift para el siguiente escenario

// With String array - strArr1 String strArr1[] = {"Some1","Some2"} String strArr2[] = {"Somethingelse1","Somethingelse2"} for( int i=0;i< strArr1.length;i++){ System.out.println(strArr1[i] + " - "+ strArr2[i]); }

Tengo un par de arreglos en Swift

var strArr1: [String] = ["Some1","Some2"] var strArr2: [String] = ["Somethingelse1","Somethingelse2"] for data in strArr1{ println(data) } for data in strArr2{ println(data) } // I need to loop over in single for loop based on index.

¿Podría por favor proporcionar su ayuda sobre las sintaxis para realizar un bucle basado en el índice?


Podrías usar Range si todavía quieres usarlo for in .

var strArr1: [String] = ["Some1","Some2"] var strArr2: [String] = ["Somethingelse1","Somethingelse2"] for i in Range(start: 0, end: strArr1.count) { println(strArr1[i] + " - " + strArr2[i]) }


Prueba esto:

zip([0,2,4,6], [1,3,5,7]).forEach { print($0,$1) } zip([0,2,4,6], [1,3,5,7]).forEach { print($0.0,$0.1) }


Puede usar zip() , que crea una secuencia de pares a partir de las dos secuencias dadas:

let strArr1 = ["Some1", "Some2"] let strArr2 = ["Somethingelse1", "Somethingelse2"] for (e1, e2) in zip(strArr1, strArr2) { print("/(e1) - /(e2)") }

La secuencia enumera solo los "elementos comunes" de las secuencias / matrices dadas. Si tienen una longitud diferente, los elementos adicionales de la matriz / secuencia más larga simplemente se ignoran.


También puede enumerate más de una matriz y usar el índice para mirar dentro de la segunda matriz:

Swift 1.2:

for (index, element) in enumerate(strArr1) { println(element) println(strArr2[index]) }

Swift 2:

for (index, element) in strArr1.enumerate() { print(element) print(strArr2[index]) }

Swift 3:

for (index, element) in strArr1.enumerated() { print(element) print(strArr2[index]) }


for(var i = 0; i < strArr1.count ; i++) { println(strArr1[i] + strArr2[i]) }

Deberias hacer eso. Nunca he usado Swift antes, así que asegúrese de probar.

Actualizado a la sintaxis reciente de Swift

for i in 0..< strArr1.count { print(strArr1[i] + strArr2[i]) }


> Incase of unequal count let array1 = ["some1","some2"] let array2 = ["some1","some2","some3"] var iterated = array1.makeIterator() let finalArray = array2.map({ let itemValue = iterated.next() return "/($0)/(itemValue != nil ? "-"+itemValue! : EmptyString)" })

// resultado: ["some1-some1", "some2-some2", "some3"]