2015-02-13 12 views
5

Jak uzyskać indeks jednej instancji na liście?DART: indexOf() na liście instancji

class Points { 
    int x, y; 
    Point(this.x, this.y); 
} 

void main() { 
    var pts = new List(); 
    int Lx; 
    int Ly; 

    Points pt = new Points(25,55); // new instance 
    pts.add(pt); 

    int index = pts.indexOf(25); // Problem !!! How to obtain the index in a list of instances ? 
    if (index != -1){ 
    Lx = lp1.elementAt(index).x; 
    Ly = lp1.elementAt(index).y; 
    print('X=$Lx Y=$Ly'); 
} 
+0

Co 'pts.indexOf (25)' powrócić? Pierwszy element, w którym 'x' lub' y' jest równy '25'? –

+0

Cześć !! Pierwszy element, w którym x równa się 25. –

+0

Odpowiedź Guntera jest świetnym sposobem na zrobienie tego, czego szukasz, i jest rzeczywiście poprawną odpowiedzią na zadane pytanie. Jednakże, jeśli często wykonujesz te wyszukiwania, możesz rozważyć zapisanie punktów na mapie wykreślonej z wartości x lub y. Nadal możesz uzyskać dostęp do tej mapy jak listy używając "map.values", ale wyszukiwanie wartości Point by x będzie znacznie szybsze (odpowiedź Guntera to O (n), podczas gdy mapa znajdzie czas Point in O (log n)) . –

Odpowiedz

6
// some helper to satisfy `firstWhere` when no element was found 
    var dummy = new Point(null, null); 
    var p = pts.firstWhere((e) => e.x == 25, orElse:() => dummy); 
    if(p != dummy) { 
    // don't know if this is still relevant to your question 
    // the lines above already got the element 
    var lx = pts[pts.indexOf(p)]; 
    print('x: ${lx.x}, y: ${lx.y}'); 
    } 
+1

Dziękuję bardzo! –