blob: 349ee5c2de11c19ffa71d3c1d3f9b4da1370b287 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SortEmailAddresses←{
⍝ Sort email addresses ⍵ first by domain, then by mailbox
⍝ ⍺: Optional unique flag
⍺←0 ⍝: Default, return all addresses
⍝ ⍺←1 : Return unique email addresses (case-folded domains)
⍝ ⍵: Character vector with embedded new line characters
admat←↑(⎕UCS 10 13)((~∊⍨)⊆⊢)⍵ ⍝ Split by new line
dnorm←⎕C 2⊃↓⍉'@'(≠⊆⊢)⍤1↑admat ⍝ Normalise domains
dgroup←dnorm(⊂admat⍳⊢)⌸admat ⍝ Indices grouped by domain
dsort←admat∘{⍵[⍋⍺⌷⍤0 99⍨⍵]}¨dgroup ⍝ Indices sorted within each domain
sea←admat⌷⍨⊂∊dsort[⍋∪dnorm] ⍝ Sorted Email Addresses
⍺:sea⌿⍨≠⎕C@(∨\'@'∘=)sea ⍝ Unique only
sea
}
|