Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
46
Task/Optional-parameters/Ecstasy/optional-parameters.ecstasy
Normal file
46
Task/Optional-parameters/Ecstasy/optional-parameters.ecstasy
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
module OptionalParameters {
|
||||
typedef Type<String >.Orderer as ColumnOrderer;
|
||||
typedef Type<String[]>.Orderer as RowOrderer;
|
||||
|
||||
static String[][] sort(String[][] table,
|
||||
ColumnOrderer? orderer = Null,
|
||||
Int column = 0,
|
||||
Boolean reverse = False,
|
||||
) {
|
||||
// provide a default orderer
|
||||
orderer ?:= (s1, s2) -> s1 <=> s2;
|
||||
|
||||
// optionally reverse the order
|
||||
ColumnOrderer byString = reverse
|
||||
? ((s1, s2) -> orderer(s1, s2).reversed)
|
||||
: orderer;
|
||||
|
||||
// sort the indicated column
|
||||
RowOrderer byColumn = (row1, row2) -> byString(row1[column], row2[column]);
|
||||
|
||||
return table.sorted(byColumn);
|
||||
}
|
||||
|
||||
void run() {
|
||||
String[][] table =
|
||||
[
|
||||
["c", "x", "i"],
|
||||
["a", "y", "p"],
|
||||
["b", "z", "a"],
|
||||
];
|
||||
|
||||
show("original input", table);
|
||||
show("by default sort on column 0", sort(table));
|
||||
show("by column 2", sort(table, column=2));
|
||||
show("by column 2 reversed", sort(table, column=2, reverse=True));
|
||||
}
|
||||
|
||||
void show(String title, String[][] table) {
|
||||
@Inject Console console;
|
||||
console.print($"{title}:");
|
||||
for (val row : table) {
|
||||
console.print($" {row}");
|
||||
}
|
||||
console.print();
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue