2012-08-07 8 views
5

मैं सी # के लिए नया हूं और उम्मीद करता हूं कि मुझे इस विषय पर कुछ मदद मिल सकती है। मेरे पास तत्वों के साथ एक सरणी है और मुझे यह प्रदर्शित करने की ज़रूरत है कि प्रत्येक आइटम कितनी बार प्रकट होता है।प्रदर्शित करने के लिए कैसे करें एक सरणी तत्व कितनी बार प्रकट होता है

उदाहरण के लिए, [1, 2, 3, 4, 4, 4, 3] में, 1 एक बार प्रकट होता है, 4 तीन बार प्रकट होता है, और इसी तरह।

मैंने किया है निम्नलिखित लेकिन डॉन 'टी पता है कि/foreach में यह डाल करने के लिए अगर बयान ...

int[] List = new int[]{1,2,3,4,5,4,4,3}; 
foreach(int d in List) 
{ 
    if("here I want to check for the elements") 
} 

धन्यवाद आप, और खेद है कि अगर यह एक बहुत ही बुनियादी एक है ...

+0

यदि यह होमवर्क है, कृपया उसे जैसे टैग करता है। – FishBasketGordo

+0

नहीं, यह नहीं है, मैं बस सीख रहा हूं और ऐसा करने की कोशिश कर रहा हूं :-) – Momo

+1

'डिक्शनरी ' का उपयोग करने का प्रयास करें, जहां प्रत्येक कुंजी एक अद्वितीय प्रविष्टि का प्रतिनिधित्व करती है, और मान एक गिनती का प्रतिनिधित्व करता है। प्रत्येक बार जब आप एक मौजूदा कुंजी दबाते हैं, तो इसके मान को 1. –

उत्तर

11

आप इसे Enumerable.GroupBy के माध्यम से संभाल सकते हैं। मैं मार्गदर्शन के लिए गणना और समूहबी पर C# LINQ samples अनुभाग को देखने की अनुशंसा करता हूं।

आपके मामले में, यह हो सकता है:

int[] values = new []{1,2,3,4,5,4,4,3}; 

var groups = values.GroupBy(v => v); 
foreach(var group in groups) 
    Console.WriteLine("Value {0} has {1} items", group.Key, group.Count()); 
7

आप मदों की एक Dictionary पाया और साथ ही उनके संबद्ध मायने रखता रख सकते हैं। नीचे दिए गए उदाहरण में, dict[d] एक तत्व को इसके मान से संदर्भित करता है। उदाहरण के लिए d = 4

int[] List = new int[]{1,2,3,4,5,4,4,3}; 
var dict = new Dictionary<int, int>(); 
foreach(int d in List) 
{ 
    if (dict.ContainsKey(d)) 
     dict[d]++; 
    else 
     dict.Add(d, 1); 
} 

foreach पाश समाप्त हो जाता है आप dict में अनूठा मूल्य प्रति एक प्रविष्टि होगा जब। आप dict[d] तक पहुंचकर प्रत्येक आइटम की गिनती प्राप्त कर सकते हैं, जहां d आपकी मूल सूची से कुछ पूर्णांक मान है।

1
var list = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 }; 
var groups = list.GroupBy(i => i).Select(i => new { Number = i.Key, Count = i.Count() }); 
3

LINQ जवाब अच्छे हैं, लेकिन आप इसे अपने आप को क्या करने की कोशिश कर रहे हैं:

int[] numberFound = new int[6]; 
int[] List = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 }; 
foreach (int d in List) 
{ 
    numberFound[d]++; 
} 
+0

आपने संख्या के लिए 6 रिक्त स्थान आवंटित क्यों किए हैं लेकिन केवल 5 है? – JonH

+0

@ जोनएच तो वह संख्या फ़ील्ड [x] एक्स के अनुरूप होगा, x-1 नहीं। (संख्या फ़ील्ड ** 0 ** से 5 तक होगी) – ispiro

+0

आह हाँ आप सही हैं मैंने सूची पर बारीकी से नहीं देखा। – JonH

-1
public static void ArrayNumbersCount() 
    { 
     int number=0; 
     int count=1; 
     Dictionary<int, int> collection = new Dictionary<int, int>(); 
     int[] intergernumberArrays = { 1, 2, 3, 4, 1, 2, 4, 1, 2, 3, 5, 6, 1, 2, 1, 1, 2 }; 
     for (int i = 0; i < intergernumberArrays.Length; i++) 
     { 
      number = int.Parse(intergernumberArrays[i].ToString()); 
      if (!collection.ContainsKey(number)) 
      { 
       for (int j = i + 1; j < intergernumberArrays.Length; j++) 
       { 
        if (int.Parse(intergernumberArrays[i].ToString()) == int.Parse(intergernumberArrays[j].ToString())) 
        { 
         count++; 
        } 
       } 
       collection.Add(number, count); 
      } 
      count = 1; 
      number = 0; 
     } 
     foreach (var kvp in collection.ToList()) 
     { 
      Console.WriteLine("{0} {1}", kvp.Key, kvp.Value);     
     }    
    } 
+1

यह 4.5 साल पहले [@ यक का जवाब] (http://stackoverflow.com/a/11850986/150605) जैसा ही अवधारणा है, सिवाय इसके कि समाधान प्रत्येक सरणी तत्व को बिल्कुल एक बार एक्सेस करता है और यह शेष के शेष के माध्यम से पुनरावृत्त करता है प्रत्येक बार एक नया मान सामना करने के लिए सरणी। साथ ही, 'int' प्रकार के सरणी तत्व को पुनर्प्राप्त करने का उद्देश्य क्या है, इसे' स्ट्रिंग 'के रूप में स्वरूपित करना, फिर इसे' int' पर वापस पार्स करना? क्यों नहीं 'intgernumberArrays [i] 'int.Parse (intergernumberArrays [i] .ToString()) के बजाय क्यों न करें? – BACON

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