[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
2022-05-15 04:48:53
質問
の配列があります。
Contact
オブジェクトの配列があります。
var contacts:[Contact] = [Contact]()
連絡先クラスです。
Class Contact:NSOBject {
var firstName:String!
var lastName:String!
}
そして、その配列を
lastName
でソートし、次に
firstName
を受け取った連絡先がある場合、同じ
lastName
.
どちらかの基準でソートすることはできますが、両方はできません。
contacts.sortInPlace({$0.lastName < $1.lastName})
この配列をソートするために、さらに条件を追加するにはどうしたらよいでしょうか?
どのように解決するのですか?
複数の基準で並べ替えるとはどういうことか考えてみましょう。それは、2つのオブジェクトがまず1つの基準で比較されることを意味します。次に、それらの基準が同じであれば、次の基準によって結びつきを解消し、希望する順序になるまでこれを続けます。
let sortedContacts = contacts.sort {
if $0.lastName != $1.lastName { // first, compare by last names
return $0.lastName < $1.lastName
}
/* last names are the same, break ties by foo
else if $0.foo != $1.foo {
return $0.foo < $1.foo
}
... repeat for all other fields in the sorting
*/
else { // All other fields are tied, break ties by last name
return $0.firstName < $1.firstName
}
}
ここで見ているのは
Sequence.sorted(by:)
メソッド
これは、提供されたクロージャを参照して、要素がどのように比較されるかを決定するものです。
もしあなたのソートが多くの場所で使われるのであれば、あなたの型を
Comparable
プロトコル
. そうすると
Sequence.sorted()
メソッド
の実装を参照します。
Comparable.<(_:_:)
演算子
を使って、要素の比較方法を決定します。この方法で、任意の
Sequence
の
Contact
のように、ソートコードを重複させることなく、表示することができます。
関連
-
Swiftがエラーを報告。アボートトラップ:6
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 多次元配列の値によるソート方法
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み] 整数の配列を正しくソートする方法
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swift カスタムオブジェクトの配列をプロパティ値でソートする方法
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】オブジェクトの配列をプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swiftがエラーを報告。アボートトラップ:6
-
Swift Error fatal error: Optional value のアンラップ中に予期せず nil を発見した。
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
swift 4.0でのdispatch_async,dispatch_afterの使用について
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] Swift: インデックスで文字列配列を置換する
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] swiftにおける "precondition "と "assert "の違いとは?