\
2014年09月21日
Posted by 屋台ブルー at 2014年09月21日00:00 Comment(0)

Swiftで遊ぼう! - 72 プログラマの考え方 12 アレーでつまずく(T_T)

swift_logo参考文献:プログラマの考え方がおもしろいほど身につく本 問題解決能力を鍛えよう!←勉強になるよ初めての人にいいかも。
この本のことをこのブログでは「プロおも本(ぷろおもぼん)」とします(^^)/

さて、「プロおも本」を読み進めながら、自分で問題を考えていましたが、C++の問題をSwiftで取り組めない状況にぶち当たりました。

演習問題:学生の構造体の配列をソートするコードを書いてみよう。最初は成績でソートして、次は学生IDでソートしてみよう。
学生の構造体の配列は以下の通り

strict student {
int grade;
int studentID;
string name;
};

const int ARRAY_SIZE = 10;
student studentArray[ARRAY_SIZE] = {
{73, 10001, "Fred"},
{13, 10002, "Tom"},
{100, 10003, "Alistair"},
{67, 10004, "Susan"},
{78, 10005, "Tom"},
{53, 10006, "Bard"},
{92, 10007, "Candy"},
{85, 10008, "Veronica"},
{27, 10009, "Crista"},
{38, 10010, "Alice"}
};

C++の構造体がSwiftの構造体と何か違う! ここで示されているC++の構造体をSwiftで再現できないんですよね。どうしたらいいのか分からなくなって、あれこれ考えて以下のようになりました。

struct Student {
var index = 0
var grade = [Int]()
var studentId = [Int]()
var name = [String]()
init(grade: [Int], studentId: [Int], name: [String]) {
self.grade = grade
self.studentId = studentId
self.name = name
}
subscript(index: Int) -> (Int, Int, String){
get {
return (self.grade[index], self.studentId[index], self.name[index])
}
}
}

var myGrade = [73, 13, 100, 67, 78, 53, 92, 85, 27, 38]
var myStudentId = [10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010]
var myName = ["Fred", "Tom", "Alistair", "Susan", "Tim", "Bard", "Candy", "Veronica", "Crista", "Alice"]

var myStudent = Student(grade: myGrade, studentId: myStudentId, name: myName)

myStudent[4].0
myStudent[4].1

項目を1つしか入力してないけど、それぞれの項目にアクセスはできるようにしました。
myStudent[4].0 // 78
myStudent[4].2 // "Tim"

本当は「myStudent[0].grade」でアクセスできると問題に似ているんですけどね。

ここまで考えて、やっている事は間違っている気がしてきた。「プロおも本」の第3章までの知識は、プログラミングを書くための技法ではなく、基本的な考え方であり、プログラムを組み立てる技術ではない。プログラミング技法は、第4章以降が重要で、特に第5章の「クラスによる問題解決」を読まないといけないでしょう。しかし、第4章は「ポインタと動的メモリによる問題解決」になっていて、Swiftでは説明されていない内容なんで読んでも全くわからない。じゃあ、もっと基本に戻らないといけないでしょう。実は、The Swift Programming Language本の「Protocol」を何度読んでもその使い方が分からない。「オブジェクト指向プログラミン」に関してもっと実践的な知識をつける必要があるなと感じて、ちょっと他の本(既に紹介してて明日紹介する)に手を出した... そして、それを読んでいたら、上で書いていたコードは全くちんぷんかんぷんなやり方だということに気がついた。

問題文の解答に近い書き方は次の通りだろう。クラスのインスタンスを配列に入れるが正解ですね。やっぱり素人が考えると無茶苦茶なアプローチをしませすね(^^;)

struct StudentModify {
var grade: Int
var studentId: Int
var name: String
init(grade: Int, studentId: Int, name: String) {
self.grade = grade
self.studentId = studentId
self.name = name
}
}

var student1 = StudentModify(grade: 73, studentId: 10001, name: "Fred")
var student2 = StudentModify(grade: 13, studentId: 10002, name: "Tom")
var student3 = StudentModify(grade: 100, studentId: 10003, name: "Alistair")
var student4 = StudentModify(grade: 67, studentId: 10004, name: "Susan")
var student5 = StudentModify(grade: 78, studentId: 10005, name: "Tim")
var student6 = StudentModify(grade: 53, studentId: 10006, name: "Bard")
var student7 = StudentModify(grade: 92, studentId: 10007, name: "Candy")
var student8 = StudentModify(grade: 85, studentId: 10008, name: "Veronica")
var student9 = StudentModify(grade: 27, studentId: 10009, name: "Crista")
var student10 = StudentModify(grade: 38, studentId: 10010, name: "Alice")

var myStudentArray = [StudentModify]()

myStudentArray.append(student1)
myStudentArray.append(student2)
myStudentArray.append(student3)
myStudentArray.append(student4)
myStudentArray.append(student5)
myStudentArray.append(student6)
myStudentArray.append(student7)
myStudentArray.append(student8)
myStudentArray.append(student9)
myStudentArray.append(student10)

myStudentArray[4].grade // 78
myStudentArray[4].name // "Tim"



同じカテゴリー(Swiftで遊ぼう!)の記事画像
Swiftで遊ぼう! - プログラミングまとめ(ときどき更新)
Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明
Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect
Swiftで遊ぼう! - 208 - ルートビューのコード
Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ
Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる
同じカテゴリー(Swiftで遊ぼう!)の記事
 Swiftで遊ぼう! - プログラミングまとめ(ときどき更新) (2021-01-31 00:00)
 Swiftで遊ぼう! - 番外編 - Xcode6:ショートカットと用語説明 (2015-04-05 00:00)
 Swiftで遊ぼう! - 209 - ルートビューのコードは続く:CGRect (2015-02-06 00:00)
 Swiftで遊ぼう! - 208 - ルートビューのコード (2015-02-05 00:00)
 Swiftで遊ぼう! - 207 - ツールバーボタンとビューコントローラーを繋ぐ (2015-02-04 00:00)
 Swiftで遊ぼう! - 206 - ビューコントローラーにビューコントローラーを載せる (2015-02-03 00:00)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
Swiftで遊ぼう! - 72 プログラマの考え方 12 アレーでつまずく(T_T)
    コメント(0)