|
1541 | 1541 |
|
1542 | 1542 | /* Ordering Methods */ |
1543 | 1543 |
|
1544 | | - Enumerable.prototype.orderBy = function (keySelector) { |
1545 | | - return new OrderedEnumerable(this, keySelector, false); |
| 1544 | + Enumerable.prototype.orderBy = function (keySelector, comparer) { |
| 1545 | + return new OrderedEnumerable(this, keySelector, comparer, false); |
1546 | 1546 | }; |
1547 | 1547 |
|
1548 | | - Enumerable.prototype.orderByDescending = function (keySelector) { |
1549 | | - return new OrderedEnumerable(this, keySelector, true); |
| 1548 | + Enumerable.prototype.orderByDescending = function (keySelector, comparer) { |
| 1549 | + return new OrderedEnumerable(this, keySelector, comparer, true); |
1550 | 1550 | }; |
1551 | 1551 |
|
1552 | 1552 | Enumerable.prototype.reverse = function () { |
|
2501 | 2501 |
|
2502 | 2502 | // private |
2503 | 2503 |
|
2504 | | - var OrderedEnumerable = function (source, keySelector, descending, parent) { |
| 2504 | + var OrderedEnumerable = function (source, keySelector, comparer, descending, parent) { |
2505 | 2505 | this.source = source; |
2506 | 2506 | this.keySelector = Utils.createLambda(keySelector); |
2507 | 2507 | this.descending = descending; |
2508 | 2508 | this.parent = parent; |
| 2509 | + |
| 2510 | + if (comparer) |
| 2511 | + this.comparer = Utils.createLambda(comparer); |
2509 | 2512 | }; |
2510 | 2513 | OrderedEnumerable.prototype = new Enumerable(); |
2511 | 2514 |
|
2512 | | - OrderedEnumerable.prototype.createOrderedEnumerable = function (keySelector, descending) { |
2513 | | - return new OrderedEnumerable(this.source, keySelector, descending, this); |
| 2515 | + OrderedEnumerable.prototype.createOrderedEnumerable = function (keySelector, comparer, descending) { |
| 2516 | + return new OrderedEnumerable(this.source, keySelector, comparer, descending, this); |
2514 | 2517 | }; |
2515 | 2518 |
|
2516 | | - OrderedEnumerable.prototype.thenBy = function (keySelector) { |
2517 | | - return this.createOrderedEnumerable(keySelector, false); |
| 2519 | + OrderedEnumerable.prototype.thenBy = function (keySelector, comparer) { |
| 2520 | + return this.createOrderedEnumerable(keySelector, comparer, false); |
2518 | 2521 | }; |
2519 | 2522 |
|
2520 | | - OrderedEnumerable.prototype.thenByDescending = function (keySelector) { |
2521 | | - return this.createOrderedEnumerable(keySelector, true); |
| 2523 | + OrderedEnumerable.prototype.thenByDescending = function (keySelector, comparer) { |
| 2524 | + return this.createOrderedEnumerable(keySelector, comparer, true); |
2522 | 2525 | }; |
2523 | 2526 |
|
2524 | 2527 | OrderedEnumerable.prototype.getEnumerator = function () { |
|
2549 | 2552 | ); |
2550 | 2553 | }; |
2551 | 2554 |
|
2552 | | - var SortContext = function (keySelector, descending, child) { |
| 2555 | + var SortContext = function (keySelector, comparer, descending, child) { |
2553 | 2556 | this.keySelector = keySelector; |
2554 | 2557 | this.descending = descending; |
2555 | 2558 | this.child = child; |
| 2559 | + this.comparer = comparer; |
2556 | 2560 | this.keys = null; |
2557 | 2561 | }; |
2558 | 2562 |
|
2559 | 2563 | SortContext.create = function (orderedEnumerable, currentContext) { |
2560 | | - var context = new SortContext(orderedEnumerable.keySelector, orderedEnumerable.descending, currentContext); |
| 2564 | + var context = new SortContext( |
| 2565 | + orderedEnumerable.keySelector, orderedEnumerable.comparer, orderedEnumerable.descending, currentContext |
| 2566 | + ); |
| 2567 | + |
2561 | 2568 | if (orderedEnumerable.parent != null) return SortContext.create(orderedEnumerable.parent, context); |
2562 | 2569 | return context; |
2563 | 2570 | }; |
|
2573 | 2580 | }; |
2574 | 2581 |
|
2575 | 2582 | SortContext.prototype.compare = function (index1, index2) { |
2576 | | - var comparison = Utils.compare(this.keys[index1], this.keys[index2]); |
| 2583 | + var comparison = this.comparer ? |
| 2584 | + this.comparer(this.keys[index1], this.keys[index2]) : |
| 2585 | + Utils.compare(this.keys[index1], this.keys[index2]); |
2577 | 2586 |
|
2578 | 2587 | if (comparison == 0) { |
2579 | 2588 | if (this.child != null) return this.child.compare(index1, index2); |
|
0 commit comments