2016-12-22 140 views
-5

我有一个数组student objects和另一个数组goodStrudentId。我需要按照goodStrudentId的顺序从students数组中获取所有学生对象。 使用多个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'功能;在谷歌搜索这个问题之后,这应该很清楚。你尝试了什么? – Connor

+0

这个网站是一个很好的教育资源,用于更高级的swift函数: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

相关问题