teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

考え方変更

2020/06/26 09:33

投稿

MasakiHori
MasakiHori

スコア3391

answer CHANGED
@@ -1,3 +1,33 @@
1
+ もう解決した質問ですが、気になってしまったのですみません。
2
+ 安直に「flatにしてやればいいのでは? 」と書きましたが、さすがに乱暴すぎたので少し考えなおしました。
3
+ Arrayに対して2次元配列の場合その中身に対象のインスタンスが存在するかを確認するメソッドを追加してみました。
4
+
5
+ ```swift
6
+ extension Array {
7
+
8
+ func deepContains<E: Equatable>(_ element: E) -> Bool
9
+ where Element == [E] {
10
+
11
+ contains { $0.contains(element) }
12
+ }
13
+ }
14
+
15
+ let imageStringArray = [
16
+ ["image1", "image5", "image3"],
17
+ ["image2", "image6"],
18
+ ["image4"],
19
+ ]
20
+
21
+ let fileName = (1...)
22
+ .lazy
23
+ .map { "image($0)" }
24
+ .first { !imageStringArray.deepContains($0) }! // nilになることはない。 Int.maxを超えるのでクラッシュするから。
25
+ ```
26
+
27
+ 条件によりますが少しパフォーマンスが上がっているはずです。
28
+
29
+ ----
30
+
1
31
  ややこしく考えずにimageStringArrayをflatにしてやればいいのでは?
2
32
 
3
33
  ```swift