2016-12-22 6 views
-5

student objectsの配列とgoodStrudentIdの配列を持っています。 studentsの配列から、すべての生徒オブジェクトをgoodStrudentIdの配列にフェッチする必要があります。 複数のforloopを使うとこれを解決することができますが、私はこの問題を解決する最善の方法を学びたいと思っています。私の唯一の問題は、次のシーケンスgoodStrudentIdです。ここ は私の問題を理解するためのサンプルコードです -Swift:配列をフィルタリングする最良の方法

class Student { 
    var s_id : String 
    var s_name : String 
    init(i: String, n: String) { 
     self.s_id = i; 
     self.s_name = n; 
    } 
} 

var students = [Student(i: "1",n: "a"), 
       Student(i: "2",n: "b"), 
       Student(i: "3",n: "c"), 
       Student(i: "4",n: "d"), 
       Student(i: "5",n: "e")] 

var goodStudentsId = ["5","2"] 

var goodStudentObject = getGoodStudentObjectUsingId(students:students, gdStudentsId:goodStudentsId) 



/* 
Expected answer: 
var goodStudentObject = [Student(i: "5",n: "e"), Student(i: "2",n: "b")] 

*/ 

func getGoodStudentObjectUsingId(students:Array<Student>, gdStudentsId:Array<String>) -> Array<Student>! { 
    /*?????? please complete this func*/ 
    return []; 
} 
+7

配列は 'filter'機能を持っています。これはGoogleが問題を検索した後に明らかになるはずです。何を試しましたか? – Connor

+0

このサイトは、高次の迅速な機能の教育のための素晴らしいリソースです:https://www.weheartswift.com/higher-order-functions-map-filter-reduce-and-more/ – toddg

+0

私はNSPredicateで試しました。私は答えに続いて試してみる。なぜ私は否定的な投票を得たか分からない。 – Shohrab

答えて

1
func getGoodStudentObjectUsingId(students:[Student], gdStudentsId:[String]) -> [Student] { 
    return students.filter { 
     gdStudentsId.contains($0.s_id) 
    } 
} 
+1

これは、元の配列のように順序で学生を返します。質問の「期待される出力」から、結果はgdStudentsIdのIDに従って並べ替えるべきだと仮定します。もちろん私は間違っているかもしれません。 –

+0

あなたは私に客観的なCコードを提供するのを手伝ってもらえますか? – Shohrab

+0

私は迅速にお試しください。期待通りに間違ったシーケンスを取得する – Shohrab

関連する問題