2011-01-26 8 views
16

कहें कि मेरे पास 12345 है।सी # में अलग-अलग अंकों में संख्या को कैसे विभाजित करें?

मुझे प्रत्येक नंबर के लिए अलग-अलग आइटम चाहिए। एक स्ट्रिंग या व्यक्तिगत नंबर भी करेगा।

.Split विधि इस के लिए एक अधिभार है?

उत्तर

17

कुछ इस तरह काम करेगा, LINQ का उपयोग:

string result = "12345" 
var intList = result.Select(digit => int.Parse(digit.ToString())); 

यह आपको ints की एक IEnumerable सूची दे देंगे।

आप तार के एक IEnumerable चाहते हैं:

var intList = result.Select(digit => digit.ToString()); 
+6

.Parse (.ToString) !? समझ। यह कोई नहीं बनाता है। – dtb

+0

@Randy, क्या आपने अपना उत्तर संशोधित किया? यह पहले सही था, अब यह गलत है। यह 'स्ट्रिंग' के 'IENumerable' को वापस कर देगा। (मैंने इसे अभी वापस बदला) –

+3

@ डीटीबी, भ्रम क्या है? 'अंक' एक 'char' है, और' int.Parse' 'स्ट्रिंग' लेता है। इसलिए: 'digit.ToString()'। –

7

ठीक है, एक स्ट्रिंग एक IEnumerable है और यह भी एक इंडेक्सर को लागू करता है, ताकि आप इसे माध्यम से पुनरावृति या सूचकांक द्वारा स्ट्रिंग में प्रत्येक चरित्र संदर्भित कर सकते हैं।

var myString = "12345"; 

var charArray = myString.ToCharArray(); //{'1','2','3','4','5'} 

फिर आप एक स्ट्रिंग के लिए प्रत्येक चार में बदल सकते हैं, या उन्हें बाइट या पूर्णांकों में पार्स:

सबसे तेज़ तरीका क्या आप चाहते हैं शायद एक स्ट्रिंग की विधि ToCharArray() है पाने के लिए। यहाँ ऐसा करने के लिए एक Linq-y तरीका है:

byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray(); 

एक छोटी सी अधिक performant आप ASCII/यूनिकोड तार उपयोग कर रहे हैं:

byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray(); 

कि कोड केवल कार्य करेगा जब आप प्रत्येक कि सुनिश्चित कर रहे हैं तत्व एक संख्या है; अन्यथा पार्सिंग एक अपवाद फेंक देगा। एक सरल रेगेक्स जो यह सत्यापित करेगा वह सत्य है "^ \ d + $" (एक पूर्ण स्ट्रिंग से मेल खाता है जिसमें एक या अधिक अंक वर्ण होते हैं), Regex.IsMatch() स्थिर विधि में उपयोग किया जाता है।

1

यहाँ कुछ कोड है कि आप मदद कर सकता है। स्ट्रिंग्स

string numbers = "12345"; 
int[] intArray = new int[numbers.Length]; 
for (int i=0; i < numbers.Length; i++) 
{ 
    intArray[i] = int.Parse(numbers[i]); 
} 
+0

दूसरी-से-आखिरी पंक्ति में त्रुटि होती है। 'संख्याओं' के साथ '[i]' शामिल न करें। –

5

आप बस कर सकते हैं वर्णों की एक सरणी के रूप में इलाज किया जा सकता:

"123456".Select(q => new string(q,1)).ToArray(); 

, पूर्णांकों का एक गणनीय है करने के लिए टिप्पणी अनुरोध के अनुसार, आप:

"123456".Select(q => int.Parse(new string(q,1))).ToArray(); 

यह थोड़ा कमजोर है क्योंकि यह मानता है कि स्ट्रिंग में वास्तव में संख्याएं होती हैं।

+0

'IENumerable ' (या समतुल्य) के कुछ वापस नहीं लौटाता है। –

33

मैं मॉड्यूलस और लूप का उपयोग करता हूं।

int[] GetIntArray(int num) 
{ 
    List<int> listOfInts = new List<int>(); 
    while(num > 0) 
    { 
     listOfInts.Add(num % 10); 
     num = num/10; 
    } 
    listOfInts.Reverse(); 
    return listOfInts.ToArray(); 
} 
+0

यह करने का एक अच्छा तरीका है। लेकिन यह शुरुआती शून्य iee ** ** ** 123 को बाहर कर देगा। अगर मुझे ** ** ** शुरू करने की आवश्यकता है। इसके बारे में कैसे जानें? –

+2

@SaimMehmoodकोई संख्या नहीं है –

+0

0 एक संख्या है लेकिन इसे बाहर रखा जाएगा :) करें ... जबकि चाल चलती है – Tommy

1

सबस्ट्रिंग और जुड़ें विधियां इस कथन के लिए उपयोग योग्य हैं।

string no = "12345"; 
string [] numberArray = new string[no.Length]; 
int counter = 0; 

    for (int i = 0; i < no.Length; i++) 
    { 
    numberArray[i] = no.Substring(counter, 1); // 1 is split length 
    counter++; 
    } 

Console.WriteLine(string.Join(" ", numberArray)); //output >>> 0 1 2 3 4 5 
संबंधित मुद्दे