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

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

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

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

Q&A

解決済

3回答

443閲覧

image型の配列の中身を数字だけの配列の順番に並び替えるには?

po_tato

総合スコア97

Swift

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

0グッド

2クリップ

投稿2018/06/12 08:32

[<UIImage: 0x1d42a2dc0>, {300, 50}, <UIImage: 0x1d42a4740>, {300, 50}, <UIImage: 0x1d42a2040>, {300, 50},<UIImage: 0x1d42a1380>, {300, 50}, <UIImage: 0x1d42a1380>, {300, 50}]

このようなUIImage型の配列(要素数5つ)と、

[3,1,2,0,4] //int型

int型の数字が入った配列(要素数上と同じ)があるとします。

上のUIImage型の配列を、int型の配列の数宇順でソートすることって出来るのでしょうか?
例えば、int型の最初の要素の値は3なので、UIImage型の配列の最初の要素を3番目に入れ替える。その次はint型は1なのでUIImage型の2番目の要素を1番目に入れ替える。その次は...というようにUIImage型の配列はint型の配列の要素の値を参考に自分自身の中で並び替えるということは出来るのでしょうか??

ご教示していただけたら幸いでございます。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

ソートと呼べるかは判りませんが、mapを使えば出来ると思います。

下記のサンプルはUIImageではなく文字列の配列ですが、UIImageでも同じはずです。

swift

1var array = ["あ", "い", "う", "え", "お"] 2let order = [3, 1, 2, 0, 4] 3array = order.map { array[$0] } 4print(array) // ["え", "い", "う", "あ", "お"]

投稿2018/06/12 08:51

takabosoft

総合スコア8356

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

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

fuzzball

2018/06/12 08:55

要素番号ならソートしなくていいですね。 素晴らしい!
po_tato

2018/06/13 06:39

簡潔でわかりやすく説明してくださりありがとうございました!参考にさせて頂きます!
guest

0

swift

1let images = [UIImage(), UIImage(), UIImage(), UIImage(), UIImage()] 2let numbers = [3, 1, 2, 0, 4] 3print(images) 4//=> [<UIImage: 0x6000000b61a0>, {0, 0}, <UIImage: 0x6000000b6920>, {0, 0}, <UIImage: 0x6000000b69e0>, {0, 0}, <UIImage: 0x6000000b6a40>, {0, 0}, <UIImage: 0x6000000b6aa0>, {0, 0}] 5 6let sortedImages = zip(images, numbers).sorted {$0.1 < $1.1}.map {$0.0} 7print(sortedImages) 8//=> [<UIImage: 0x6000000b6a40>, {0, 0}, <UIImage: 0x6000000b6920>, {0, 0}, <UIImage: 0x6000000b69e0>, {0, 0}, <UIImage: 0x6000000b61a0>, {0, 0}, <UIImage: 0x6000000b6aa0>, {0, 0}]
  • UIImageとIntをくっつける → zip(images, numbers)
  • Intでソート → sorted {$0.1 < $1.1}
  • UIImageだけ取り出す → map {$0.0}

投稿2018/06/12 08:49

fuzzball

総合スコア16731

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

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

po_tato

2018/06/13 06:39

違ったタイプのやり方もあり、勉強になります!ありがとうございました!
guest

0

そもそも一番上の配列型が、Array<UIImage>とは考えにくいですが・・・。

下記になります。

swift

1let baseImageArr: [UIImage] = [<UIImage: 0x1d42a2dc0>, <UIImage: 0x1d42a4740>, <UIImage: 0x1d42a2040>, <UIImage: 0x1d42a1380>, <UIImage: 0x1d42a1380>] 2// 上記まんまで書くと間違いなくエラー出るので注意 3 4let sortIndex: [Int] = [3, 1, 2, 0, 4] 5 6let newArr: [UIImage] = sortIndex.map{ baseImageArr[$0] } 7

投稿2018/06/12 09:05

編集2018/06/12 09:15
miyabi_takatsuk

総合スコア9528

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

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

po_tato

2018/06/13 06:38

ありがとうございました!参考にさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問