2012-10-15 12 views
10

मैं एपीआई दस्तावेज़ों में देखता हूं विधि List पर विधि है, लेकिन मुझे यह स्पष्ट नहीं है कि इसे पैरामीटर के लिए क्या चाहिए। वर्तमान आवश्यकता एक बहुत ही सरल सीधे अल्फा तुलना के लिए है।मैं डार्ट में तारों की सूची कैसे क्रमबद्ध कर सकता हूं?

उत्तर

12

प्रश्न के लिए धन्यवाद! आप इस तरह स्ट्रिंग्स की एक सूची सॉर्ट कर सकते हैं:

main() { 
    var fruits = ['bananas', 'apples', 'oranges']; 
    fruits.sort(); 
    print(fruits); 
} 

ऊपर कोड प्रिंट:

apples, bananas, oranges 

सूचना है कि sort() एक मूल्य वापस नहीं करता है। यह एक नई सूची बनाने के बिना सूची का प्रकार है। आप सॉर्ट और एक ही पंक्ति में प्रिंट करना चाहते हैं, तो आप विधि cascades उपयोग कर सकते हैं:

print(fruits..sort()); 

अधिक नियंत्रण के लिए, आप अपने खुद तुलना तर्क को परिभाषित कर सकते हैं। कीमत के आधार पर फल को सॉर्ट करने का एक उदाहरण यहां दिया गया है।

main() { 
    var fruits = ['bananas', 'apples', 'oranges']; 
    fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b))); 
    print(fruits); 
} 

चलो देखते हैं कि यहां क्या हो रहा है।

एक सूची में sort विधि है, जिसमें एक वैकल्पिक पैरामीटर है: Comparator। एक तुलनाकर्ता typedef या फ़ंक्शन उपनाम है।

int Comparator(T a, T b) 

डॉक्स से::

एक तुलनाकारी समारोह एक नकारात्मक पूर्णांक लौटने अगर एक से छोटी है द्वारा इस तरह के कुल आदेश का प्रतिनिधित्व करता है इस मामले में, यह एक समारोह है कि लगता है कि के लिए एक उपनाम है बी, शून्य अगर बी के बराबर है, और बी से अधिक है तो एक सकारात्मक पूर्णांक। इस प्रकार

+0

धन्यवाद! शिकायत करने के लिए खेद है, लेकिन जब मैं उपरोक्त की स्पष्ट बहुमुखी प्रतिभा की सराहना करने की कोशिश कर रहा हूं, तो मुझे यह पिछली भाषा के अनुभव के साथ अंतर्ज्ञानी या इनलाइन नहीं मिल रहा है। क्या आपके पास लोगों के पास स्क्वायर लकड़ी के माउस के साथ कोई है और इनमें से कुछ सामानों के साथ एक लंबा ग्रे दाढ़ी आ रहा है? :) –

+1

यह एक अजीब ऐतिहासिक आर्टिफैक्ट है। तुलनित्र वैकल्पिक होना चाहिए। यह होता था, लेकिन हमने कुछ समय पहले वैकल्पिक पैरामीटर सिंटैक्स को बदल दिया, जिसने हमें कुछ समय के लिए सभी पैरामीटर गैर-वैकल्पिक बनाने के लिए मजबूर किया, जिसमें यह भी शामिल था। हमें अभी इसे ठीक करने का मौका नहीं मिला है और इसे फिर से वैकल्पिक बना दिया गया है। – munificent

+0

धन्यवाद @ सुनने के लिए बहुत खुशी है कि यह जल्द ही तय हो जाएगा। बग देखें http://code.google.com/p/dart/issues/detail?id=1235 –

2

सेठ का विस्तृत जवाब देने के लिए केवल एक अंक जोड़ने के लिए, सामान्य रूप में,

(a, b) => foo(a, b) 

sort में पारित कर दिया है, समारोह foo एक पूर्णांक परिणाम का जवाब देना चाहिए:

  • अगर एक < बी, परिणाम < 0,
  • यदि कोई = बी, परिणाम = 0 होना चाहिए, और
  • अगर एक> ख, परिणाम> 0.
आत्मा और चेतना के ऊपर कानून धारण करने के लिए के लिए

, दोनों a और bComparable रों होना चाहिए होना चाहिए।

0

आज के बाद, आपको सिर्फ list.sort() करने में सक्षम होना चाहिए। सॉर्ट विधि का तर्क अब वैकल्पिक है, और यह उस फ़ंक्शन पर डिफ़ॉल्ट होता है जो तुलना करता है तत्वों पर स्वयं को। चूंकि स्ट्रिंग तुलनात्मक है, इसे अभी काम करना चाहिए।

+0

क्या सूची सॉर्ट() विधि कभी भी एक तुलनित्र फ़ंक्शन की आवश्यकता नहीं है? या वहां एक प्रतिगमन था? मैं उबंटू 12.04 पर डार्ट 0.2.6.0_r15355 का उपयोग कर रहा हूं और निम्नलिखित परिणाम प्राप्त कर रहा हूं: [3,1,2] .sort() == null और ['a', 'c', 'b']। क्रमबद्ध करें () == बातिल। – devdanke

+0

ओह! डार्ट सरणी को सॉर्ट कर रहा था :-) लेकिन सॉर्ट() फ़ंक्शन शून्य लौटाता है :-(तो "प्रिंट ([3,1,2] .sort())" आउटपुट "नल"। इस मामले में, डार्ट देव हैं एक धाराप्रवाह प्रोग्रामिंग शैली को लागू नहीं करना। मेरी इच्छा है कि वे करेंगे। क्योंकि तब आप तुरंत कॉलिंग सॉर्ट() के परिणाम का उपयोग कर सकते हैं। – devdanke

2

आलसी सॉर्टिंग। परिणाम IQueryable है।

कस्टम तुलनित्र को तर्क के रूप में पारित किया जा सकता है।

import 'package:queries/collections.dart'; 

void main() { 
    var fruits = ["grape", "passionfruit", "banana", "mango", 
       "orange", "raspberry", "apple", "blueberry"]; 

    var sorted = new Collection(fruits) 
    .orderBy((fruit) => fruit.length) 
    .thenBy((fruit) => fruit); 

    for(var fruit in sorted) { 
    print(fruit); 
    } 
} 

आउटपुट:

mango 
banana 
orange 
blueberry 
raspberry 
passionfruit 
संबंधित मुद्दे