2012-03-25 14 views
6

के अंदर किसी तत्व की अनुक्रमणिका प्राप्त करें मेरे पास उपयोगकर्ताओं की कतार (ईमेल की स्ट्रिंग) सी # है और मैं उपयोगकर्ता को इस कतार में अपना स्थान भेजना चाहता हूं।कतार सी #

कुछ ऐसा;

Queue q = new Queue(32); 

q.Enqueue(Session["email"].ToString()); 

    queue.IndexOf(email); 

कोई विचार?

धन्यवाद

उत्तर

8

हो सकता है कि एक List या एक Array इस तरह के कार्यों के लिए बेहतर होगा, लेकिन आप इस कोशिश कर सकते:

queue.ToArray().ToList().IndexOf(email); 
+0

यह एक कामकाजी समाधान है, लेकिन सवाल के लिए यह एक और जवाब है: कतार को एक सूची में कैसे रखा जाए ताकि मैं इंडेक्सऑफ विधि को कॉल कर सकूं? –

+1

दरअसल, लेकिन कतार सूचकांक को वापस करने के लिए एक इंटरफ़ेस प्रदान नहीं करती है, इसलिए यह एक समझौता समाधान है – ionden

+2

मैं ठीक हूं, लेकिन यदि संभव हो तो इसे दूसरे विचार की आवश्यकता है, –

-1

आप उपयोगकर्ता enqueing कर रहे हैं, वह हमेशा सूची में अंतिम व्यक्ति है, यह queue.Count के बराबर होगी, जिसका मतलब है किया जाएगा।

+0

नहीं नहीं मैं दूरदराज के पटकथा का उपयोग कर वर्तमान स्थान को ताज़ा करने के हूँ, हर कुछ टकसालों – baaroz

+0

@baaroz: ठीक है अगर आप [यहाँ कुछ] नहीं दिख रहा है (http: // MSDN .microsoft.com/en-us/लाइब्रेरी/7977ey2c.aspx), तो वास्तव में हम आपके लिए बहुत कुछ नहीं कर सकते हैं। आपको एक अलग कंटेनर प्रकार चुनने की जरूरत है। आयनडन सही है। 'सूची का उपयोग कतारों की तरह भी किया जा सकता है। – mpen

0

यदि आप उपयोगकर्ता को अब यह तत्व देना चाहते हैं कि कितने तत्व उसके तत्व का व्यवहार कर रहे हैं, तो बस वर्तमान कतार लौटाएं। गुणों को उसके तत्व डालने के बाद। जब भी आप एक elemtn धक्का, गिनती बढ़ जाती है। यदि कोई तत्व पॉप किया गया है, तो गणना कम हो गई है।

1

कतार उचित प्रकार indexOf उपयोग करने के लिए,

+0

मुझे पता है कि इंडेक्सऑफ नहीं है! यह केवल उदाहरण है कि मैं – baaroz

+0

करने का प्रयास कर रहा हूं, मेरा मतलब यह है कि अगर आपको उस संग्रह की आवश्यकता है जिसके लिए आपको उस तत्व की स्थिति जानने की आवश्यकता है संग्रह, फिर कतार गलत विकल्प है। @ionden ने जवाब दिया कि यह कैसे करें, सही तरीका है, लेकिन .. –

1

दुर्भाग्य सूची देखने के लिए नहीं है, आप नहीं कर सकते सीधे सादे पुराने .NET Queue ऑब्जेक्ट का उपयोग करें। कतार "अंधे" पहले-इन-फर्स्ट-आउट तर्क के लिए बनाई गई है, ताकि आप कुछ और नहीं कर सकें।

तुम सच में एक कतार है जिसमें आप तत्वों का पता लगाने और उनकी स्थिति (एक बहुत उपयोगी बात) प्राप्त कर सकते हैं एक वर्ग है कि निम्न विधियों को उजागर करता है में सब कुछ लपेटो करने की कोशिश को लागू करने की जरूरत है:

public class CustomQueue<T> { 
    private LinkedList<T> fifoList = new LinkedList<T>(); 

    public Enqueue(T newItem) { 
     //add newItem at the head of fifoList 
    } 

    public T Dequeue() { 
     //return and remove the item that is located at the tail of the queue 
    } 

    public int indexOf(T searchFor) { 
     int ret = 0; 
     for (T item: fifoList) { 
      if (item.equals(searchFor)) return ret; 
      ret++; 
     } 
    } 
} 

बेहतर के लिए प्रदर्शन (कतार और विपंक्ति हे (1), जबकि indexOf हे (एन)) आप एक डबल-लिंक्ड सूची

3

आप विस्तार विधि का उपयोग कर सकते हैं का उपयोग करना चाहिए, कुछ की तरह:

public static int IndexOf<T>(this IEnumerable<T> collection, T searchItem) 
{ 
    int index = 0; 

    foreach (var item in collection) 
    { 
     if (EqualityComparer<T>.Default.Equals(item, searchItem)) 
     { 
      return index; 
     } 

     index++; 
    } 

    return -1; 
} 
0

कतार के क्रम में एक सरणी प्राप्त करने के लिए Queue की ToArray() विधि का उपयोग करें, फिर उस ऑब्जेक्ट को ढूंढें जिसे आप खोज रहे हैं। एक अच्छा मौका है कि आपको किसी भी काम के लिए पारंपरिक कतार का उपयोग करने की आवश्यकता नहीं है।

कुछ की तरह:

Queue q = new Queue(); 
q.Enqueue("apple"); 
q.Enqueue("banana"); 
q.Enqueue("orange"); 

// get banana index: 
return Array.IndexOf(q.ToArray(), "banana"); 
संबंधित मुद्दे