|
@@ -162,6 +162,13 @@ class List<T> {
|
|
|
return new ListIterator<T>(h);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ Returns an iterator of the List indices and values.
|
|
|
+ **/
|
|
|
+ @:pure @:runtime public inline function keyValueIterator() : ListKeyValueIterator<T> {
|
|
|
+ return new ListKeyValueIterator(h);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
Returns a string representation of `this` List.
|
|
|
|
|
@@ -280,3 +287,23 @@ private class ListIterator<T> {
|
|
|
return val;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+private class ListKeyValueIterator<T> {
|
|
|
+ var idx:Int;
|
|
|
+ var head:ListNode<T>;
|
|
|
+
|
|
|
+ public inline function new(head:ListNode<T>) {
|
|
|
+ this.head = head;
|
|
|
+ this.idx = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public inline function hasNext():Bool {
|
|
|
+ return head != null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public inline function next():{key:Int,value:T} {
|
|
|
+ var val = head.item;
|
|
|
+ head = head.next;
|
|
|
+ return {value: val, key:idx++};
|
|
|
+ }
|
|
|
+}
|