2015-02-13 17 views
5

listesinde IndexOf() bir listedeki bir örnek dizini nasıl elde edilir?DART: <a1> Örnek</ a1>

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

'pts.indexOf (25)' ne dönmelidir ? 'X' veya 'y' nin 25 'e eşit olduğu ilk eleman? –

+0

Merhaba! X'in 25'e eşit olduğu ilk öğe. –

+0

Günter'in cevabı, aradığınız şeyi yapmak için harika bir yoldur ve gerçekten de sorduğunuz soruya doğru cevaptır. Ancak, bu aramaları sık sık yapıyorsanız, noktaları x veya y değerinden ayrılmış bir Haritaya kaydetmeyi düşünebilirsiniz. Bu haritaya 'map.values' kullanarak bir liste gibi girebilirsiniz ancak bir x'e bakarak bir noktaya daha çok değer katın (Gunter'in cevabı O (n) iken bir harita O noktasında (log n) zamanını bulur) . –

cevap

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

Çok teşekkür ederim! –