2013-06-05 10 views
7

क्या यह ArrayList<NameValuePair> नाम से मूल्य प्राप्त करने का एक सही तरीका है?ArrayList <NameValuePair> नाम से मूल्य

private String getValueByKey(ArrayList<NameValuePair> _list, String key) { 
    for(NameValuePair nvPair : _list) { 
     if(nvPair.getName().equals(key)) { 
      return nvPair.getValue().toString(); 
     } 
    } 
    return null; 
} 

या, नाम से ArrayList<NameValuePair> मूल्य तक पहुँचने के लिए एक शॉर्टकट है?

+1

क्या हैश मैप यहां अधिक उपयोगी नहीं होगा? या क्या ArrayList का उपयोग करने के लिए कुछ विशिष्ट कारण है? – Humungus

+0

जब आप "कुंजी" कहते हैं, तो आपका नाम NameValue से "नाम" है? –

+0

हां, "नाम" मेरा मतलब है। – Raptor

उत्तर

9

नहीं - आप उन्हें एक सूची के रूप में संग्रहीत कर रहे हैं, जिसे "कुंजी" द्वारा एक्सेस करने के लिए डिज़ाइन नहीं किया गया है - इसमें किसी कुंजी की कोई धारणा नहीं है।

ऐसा लगता है कि आप वास्तव में Map<String, String> की तरह कुछ चाहते हैं - मानते हैं कि आपको केवल प्रत्येक कुंजी के लिए एक ही मूल्य स्टोर करने की आवश्यकता है।

आप ArrayList के साथ फंस रहे हैं (और मैं कम से कम, List लिए पैरामीटर प्रकार बदल देंगे नहीं तो Iterable यह देखते हुए कि कि आप सभी की जरूरत है), तो आप क्या मिल गया है ठीक है।

4

ऐसा लगता है कि आपको अन्य डेटा संरचना की आवश्यकता है। उदाहरण के लिए Map<Name, Value> या Map<Name, NameValuePair> यदि आप चाहें तो।

पहला समाधान शायद अधिक सही है, दूसरा लागू करना आसान है यदि आपके पास पहले से ही कोड है जो इस तथ्य का उपयोग करता है कि जोड़े सूची में संग्रहीत हैं। मानचित्र मूल्यों का संग्रह प्राप्त करने की अनुमति देता है; CollectionList का एक सुपर इंटरफ़ेस है।

1

अगर अपनी कुंजी या नाम एक पूर्णांक है, मैं आप का उपयोग करने के लिए सुझाव एक SparseArray बजाय: http://developer.android.com/reference/android/util/SparseArray.html

तो फिर तुम मान आप कुंजी, मूल्य, या में सूचकांक का उपयोग कर चाहते हैं पुनः प्राप्त करने के विभिन्न कार्यों का उपयोग कर सकते सरणी

5

आप एक Map बजाय का उपयोग कर सकते हैं, वे इस तरह काम करते हैं:

Map<String,String> myMap = new HashMap<>(); 
myMap.put("key1","value1"); 
myMap.put("key2","value2"); 
myMap.put("key3","value3"); 

String str = myMap.get("key1"); 
//equivalent to your 
String str = getValueByKey(myList,"key1"); 

एक HashMap कुंजी के साथ एक सूची के रूप में जमा नहीं कर रहे हैं, तो यह तेजी से होगा और आप एक का उपयोग करने के लिए नहीं होगा कंटेनर फिर से करने के लिए समारोह।

तब आप myMap.keySet() और myMap.values() के साथ सभी मानों तक पहुंच सकते हैं, documentation देखें।

संबंधित मुद्दे