2017-06-01 10 views
-2
var firstArray = ["1.","2.","3.","4."] 

var secondArray = ["a","b","c"] 

func combineTheArrays(array1: [Any], array2: [Any]) -> [Any] { 

    var finalArray = [Any]() 

    let maxIndex = array1.count >= array2.count ? array1.count : array2.count; 

    for i in 0...maxIndex{ 
     if (array1.count > i){ 
      finalArray.append(array1[i]) 
     } 
     if (array2.count > i){ 
      finalArray.append(array2[i]) 
     } 
    } } 

combineTheArrays(array1: firstArray, array2: secondArray) 

print(finalArray) 

私は異なる/類似の型の2つの配列を取って、関数を処理して1つの配列に結合しようとしています。この機能の理想的な結果は、次のとおりです。未解決の識別子 'finalArray'の使用?

finalArray = ["1.", "a", "2.", "b", "3.", "c", "4."] 
+4

finalArrayは関数のローカル変数です。また、「関数に戻り値がありません」というエラーがあります。 –

+0

(具体的な問題とは無関係ですが、https://stackoverflow.com/questions/34951824/how-can-i-interleave-two-arrays for )同様の結果を得るための他のアプローチ) –

+0

'zip'と' flatmap'を使うだけで、このコードを単純化することができます: '' zip(array1、array2).flatMap {[$ 0、$ 1]} ' – Alexander

答えて

0

あなたは非常に近いです!あなたはちょうどあなたが、その後(そのようprintコールのように)それを使用することができるように、あなたの関数定義の終わりにfinalArrayを返し、その後、関数呼び出しの結果を割り当てる必要があります:

let finalArray = combineTheArrays(array1: firstArray, array2: secondArray) 

print(finalArray) 

あなたがすべきもタイプが同じであれば、どのような種類の要素も処理できることを保証するためにジェネリックスを使用します。 Anyを返すのとは異なり、あなたの結果は同じタイプの配列になります。これは安全で扱いやすくなります。ここでは、このコードを改善する方法を示します。

func combineTheArrays<T>(array1: [T], array2: [T]) -> [T] { 

    let maxIndex = max(array1.count, array2.count); 

    var finalArray = [T]() 
    finalArray.reserveCapacity(array1.count + array2.count) 

    for i in 0..<maxIndex { 
     if i < array1.count { finalArray.append(array1[i]) } 
     if i < array2.count { finalArray.append(array2[i]) } 
    } 

    return finalArray 
} 

var firstArray = ["1.","2.","3.","4."] 
var secondArray = ["a","b","c"] 
let finalArray = combineTheArrays(array1: firstArray, array2: secondArray) 

print(finalArray) 
+0

どうもありがとうございました。あなたが答えることができれば私は質問があります、なぜ私はfinalArrayを関数内の変数にしているのですか? –

+0

関数内の変数は、外界とはまったく関係がないためです。これは、関数の存続期間中だけ存在するローカル変数です。関数が呼び出されると作成され、関数が完了すると破棄されます。 – Alexander

+0

つまり、 'finalArray'と呼ばれる' let finalArray'は単に偶然であり、関数の 'var finalArray'ローカル変数とは何の関係もありません。 – Alexander

関連する問題