Sorting array of dictionaries with Any value
I have this [[String:Any]]
, where Every element have this:
["date":Date,"value":CGFloat]
I would like to sort by "date" key.(dates goes up or down)
let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }
Provides errors that I can't compare 2 dates.
swift
add a comment |
I have this [[String:Any]]
, where Every element have this:
["date":Date,"value":CGFloat]
I would like to sort by "date" key.(dates goes up or down)
let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }
Provides errors that I can't compare 2 dates.
swift
Convert the values to structs first and stop usingAny
.
– Sulthan
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to usesorted {...
– vadian
Nov 25 '18 at 13:58
3
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31
add a comment |
I have this [[String:Any]]
, where Every element have this:
["date":Date,"value":CGFloat]
I would like to sort by "date" key.(dates goes up or down)
let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }
Provides errors that I can't compare 2 dates.
swift
I have this [[String:Any]]
, where Every element have this:
["date":Date,"value":CGFloat]
I would like to sort by "date" key.(dates goes up or down)
let sortedArray = array.sort { ($0["date"] as? Date) < ($1["date"] as? Date) }
Provides errors that I can't compare 2 dates.
swift
swift
asked Nov 25 '18 at 13:52
CurneliousCurnelious
3,893751103
3,893751103
Convert the values to structs first and stop usingAny
.
– Sulthan
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to usesorted {...
– vadian
Nov 25 '18 at 13:58
3
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31
add a comment |
Convert the values to structs first and stop usingAny
.
– Sulthan
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to usesorted {...
– vadian
Nov 25 '18 at 13:58
3
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31
Convert the values to structs first and stop using
Any
.– Sulthan
Nov 25 '18 at 13:58
Convert the values to structs first and stop using
Any
.– Sulthan
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to use
sorted {...
– vadian
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to use
sorted {...
– vadian
Nov 25 '18 at 13:58
3
3
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31
add a comment |
1 Answer
1
active
oldest
votes
sort
is mutating so array need to be var
and no return , and either force unwrap or
array.sort { ($0["date"] as! Date ) < ($1["date"] as! Date ) }
or
array.sort { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
or sorted
let sortedArray = array.sorted { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
Strongly recommend
struct Root {
let date:Date
let value:CGFloat
}
var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]
let sortedArray = array.sorted { $0.date < $1.date }
// or
let sortedArray = array.sorted { $0.date.compare($1.date) == .orderedAscending }
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
The current date (Date()
) as default value could cause funny unexpected behavior particularly both values ofDate()
could be different. 😉
– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
@Sh_Khan For a fixed date far far away there isdistantPast
anddistantFuture
.
– vadian
Nov 25 '18 at 14:11
|
show 8 more comments
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53468169%2fsorting-array-of-dictionaries-with-any-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
sort
is mutating so array need to be var
and no return , and either force unwrap or
array.sort { ($0["date"] as! Date ) < ($1["date"] as! Date ) }
or
array.sort { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
or sorted
let sortedArray = array.sorted { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
Strongly recommend
struct Root {
let date:Date
let value:CGFloat
}
var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]
let sortedArray = array.sorted { $0.date < $1.date }
// or
let sortedArray = array.sorted { $0.date.compare($1.date) == .orderedAscending }
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
The current date (Date()
) as default value could cause funny unexpected behavior particularly both values ofDate()
could be different. 😉
– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
@Sh_Khan For a fixed date far far away there isdistantPast
anddistantFuture
.
– vadian
Nov 25 '18 at 14:11
|
show 8 more comments
sort
is mutating so array need to be var
and no return , and either force unwrap or
array.sort { ($0["date"] as! Date ) < ($1["date"] as! Date ) }
or
array.sort { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
or sorted
let sortedArray = array.sorted { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
Strongly recommend
struct Root {
let date:Date
let value:CGFloat
}
var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]
let sortedArray = array.sorted { $0.date < $1.date }
// or
let sortedArray = array.sorted { $0.date.compare($1.date) == .orderedAscending }
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
The current date (Date()
) as default value could cause funny unexpected behavior particularly both values ofDate()
could be different. 😉
– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
@Sh_Khan For a fixed date far far away there isdistantPast
anddistantFuture
.
– vadian
Nov 25 '18 at 14:11
|
show 8 more comments
sort
is mutating so array need to be var
and no return , and either force unwrap or
array.sort { ($0["date"] as! Date ) < ($1["date"] as! Date ) }
or
array.sort { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
or sorted
let sortedArray = array.sorted { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
Strongly recommend
struct Root {
let date:Date
let value:CGFloat
}
var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]
let sortedArray = array.sorted { $0.date < $1.date }
// or
let sortedArray = array.sorted { $0.date.compare($1.date) == .orderedAscending }
sort
is mutating so array need to be var
and no return , and either force unwrap or
array.sort { ($0["date"] as! Date ) < ($1["date"] as! Date ) }
or
array.sort { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
or sorted
let sortedArray = array.sorted { ($0["date"] as? Date ?? Date() ) < ($1["date"] as? Date ?? Date() ) }
Strongly recommend
struct Root {
let date:Date
let value:CGFloat
}
var array = [Root(date: Date(), value: 12),Root(date: Date(), value: 14),Root(date: Date(), value: 15)]
let sortedArray = array.sorted { $0.date < $1.date }
// or
let sortedArray = array.sorted { $0.date.compare($1.date) == .orderedAscending }
edited Nov 25 '18 at 14:13
answered Nov 25 '18 at 13:55
Sh_KhanSh_Khan
45.2k51432
45.2k51432
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
The current date (Date()
) as default value could cause funny unexpected behavior particularly both values ofDate()
could be different. 😉
– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
@Sh_Khan For a fixed date far far away there isdistantPast
anddistantFuture
.
– vadian
Nov 25 '18 at 14:11
|
show 8 more comments
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
The current date (Date()
) as default value could cause funny unexpected behavior particularly both values ofDate()
could be different. 😉
– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
@Sh_Khan For a fixed date far far away there isdistantPast
anddistantFuture
.
– vadian
Nov 25 '18 at 14:11
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
Thanks , for the first example I get a warning : Variable 'sortedArray' inferred to have type '()', which may be unexpected
– Curnelious
Nov 25 '18 at 14:00
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
I know Struct is better, but changing to it will require changing the whole code.
– Curnelious
Nov 25 '18 at 14:05
2
2
The current date (
Date()
) as default value could cause funny unexpected behavior particularly both values of Date()
could be different. 😉– vadian
Nov 25 '18 at 14:07
The current date (
Date()
) as default value could cause funny unexpected behavior particularly both values of Date()
could be different. 😉– vadian
Nov 25 '18 at 14:07
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
Thanks. Can you show please how would you answer this if it was array of Struct ?
– Curnelious
Nov 25 '18 at 14:08
4
4
@Sh_Khan For a fixed date far far away there is
distantPast
and distantFuture
.– vadian
Nov 25 '18 at 14:11
@Sh_Khan For a fixed date far far away there is
distantPast
and distantFuture
.– vadian
Nov 25 '18 at 14:11
|
show 8 more comments
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53468169%2fsorting-array-of-dictionaries-with-any-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Convert the values to structs first and stop using
Any
.– Sulthan
Nov 25 '18 at 13:58
You are encouraged to use a custom struct, it makes life much easier. And with this syntax you have to use
sorted {...
– vadian
Nov 25 '18 at 13:58
3
It is always a good idea to show the exact error messages ...
– Martin R
Nov 25 '18 at 14:31