質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

781閲覧

Swift 配列の上手な使い方

LunarStrain

総合スコア14

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/10/08 03:08

初心者のSwiftの勉強のため、ウォーキングのトラッキングアプリを作っています。

歩いた履歴を残す為に、下記のデータを配列にしたいと思っています。

  • 位置情報(CLLocation型)
  • タイムスタンプ(Date型)

これら2つの配列の数は必ず同じで、歩く時間によって増えていきます。

そしてこれらのデータが、1セットのウォーキング毎に過去履歴として増えていくとします。
また、保存不要なデータはウォーキングの1セットずつ削除できるようにしたいです。

この場合の配列の上手な作り方はどうすれば良いでしょうか?

位置情報(CLLocation型)とタイムスタンプ(Date型)それぞれを、別に2つの2次元配列で保存する方法で合っていますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

いくつか方法はあると思いますが、CLLocation型の配列とDate型の配列をそれぞれ用意するのが一つ。

swift

1let location: [CLLocation] 2let timestamp: [Date]

もう一つはCLLocationとDateを一つのタプル(1セット)として扱う方法。

swift

1typealias Activity = (location: CLLocation, timestamp: Date) //型を作る 2let activities: [Activity] //上で作った型の配列を作る

N番目の配列を消去するなら

swift

1activities.enumerated().filter{$0.offset != n}

並び替えは

swift

1activities.sort(by: {$0.timestamp < $1.timestamp})

かな。

投稿2018/10/08 05:32

編集2018/10/08 06:39
xAxis

総合スコア1349

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LunarStrain

2018/10/08 06:42 編集

xAxisさん ありがとうございます。 それぞれのメリット・デメリットを教えていただけませんでしょうか? 後者だと、N番目のlocationとtimestampをセットで削除したり、timestamp順にlocation配列もセットで並び替えができたりするものでしょうか? →重ねてありがとうございました。使ってみたいと思います。
xAxis

2018/10/08 06:43

上のやり方だとそれぞれに配列操作する必要がある。 下のやり方だと一つの配列を操作するだけで済む。 上のやり方だと最初は分かりやすいだろうけど下のやり方だと最初は難しいかも。 あと下のやり方だとtypealiasで定義する必要がある。 ざっくりこんなとこですかね。
xAxis

2018/10/08 06:47 編集

一度swiftの配列操作を調べられると良いでしょう。色々な操作の仕方がありますから。それにブロック内部で({}←これの中で)色々処理も書けます。書き方は決まってますが初めて見るととっつきにくいかもなのであとは慣れですね。
LunarStrain

2018/10/08 07:13

入門書を読んでも、いろんなやり方がある中でこういう時はどの方法を使べきか、分からないことがあります。よく分かっている方に教わりながら、自分で試して慣れてみることが必要ですね。
xAxis

2018/10/08 07:25

確かに最適解というのはある場合もあります。でもいきなりそこにたどり着けるわけじゃないです(自分もまだその道中にいます)。今現在入門書を読んでらっしゃるならなおのこと。当面は色々と実際に動かして試してみるのが一番いいと思いますよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問