Dizeyi böl, bir satıra ToList <int> () dönüştür


192

Sayıları olan bir dize var

string sNumbers = "1,2,3,4,5";

Onu bölebilir ve List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Dize dizisini tamsayı listesine nasıl dönüştürebilirim? Yani dönüştürmek mümkün olacak o string[]kadarIEnumerable


Bugün tam olarak aynı soruyu sorduk: Beni tıkla
Dario

3
"bir satır" si çok güçlü çok sıkı bir gereksinimdir! </perl>
dfa

2
Bu soru özellikle cevabı basit tutan bir sayı dizisini bölmeyi söylüyor. Dario sorusu, genel dizeler için TryParse'nin tutamaçlarından (bataklıklar mı?) Bahsetti.
goodeye

Yanıtlar:


467
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();

4
Liste boş değeri veya null olduğunda bu istisna alır.
Sayed Muhammad Idrees

@ SayedM.Drrees bölünmeden önce boş veya boş olduğunu kontrol edin.
RAVI VAGHELA

31

Linq'e ihtiyaç duymadan bu şekilde de yapabilirsiniz:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();

18

Ayrıca LINQ ihtiyaç Joze yoludur, ToList()içindedir System.Linqad.

Diziyi Liste yapıcısına ileterek Diziyi Linq olmadan Listeye dönüştürebilirsiniz:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

18

int.TryParseİstisnaları önlemek için daha iyi kullanım ;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();

10

Ayrıca int dizisini atama değerini yönlendirmek de mümkündür.

bunun gibi

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();

4

ayrıca bu Uzantı yöntemini kullanabilirsiniz

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

kullanımı:

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');

3

Unity3d'de int.Parseiyi çalışmıyor. Ben de feryat gibi kullanıyorum.

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

Unity3d Kullanıcıları için bu yardım umuyoruz.


3

Yeni C # 6.0 Dil Özelliklerini kullanabilirsiniz:

  • delege'yi (s) => { return Convert.ToInt32(s); }karşılık gelen yöntem grubuyla değiştirConvert.ToInt32
  • yedek yapıcı çağrısını değiştirin new Converter<string, int>(Convert.ToInt32):Convert.ToInt32

Sonuç:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));

2

Benim sorunum benzerdi ama bazen dize harfleri (bazen boş) içeren rahatsızlık.

string sNumbers = "1,2,hh,3,4,x,5";

Pcode Xonos Uzantı Yöntemi'ni izlemeye çalışmak:

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}

1
Teşekkürler, ayırıcı tanımlasanız da kullanmazsınız.
Hugo Delsing,

-2

Bunu kullanabilirsiniz:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();

2
Stack Overflow'a hoş geldiniz! Bu kod snippet'i soruyu çözebilir, ancak bir açıklama da dahil olmak üzere , yayınınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın. Lütfen hem kodun hem de açıklamaların okunabilirliğini azalttığı için kodunuzu açıklayıcı yorumlarla doldurmamaya çalışın!
Hoşçakal StackExchange

2
ConvertIntoIntList işlevinden çıkılmaz.
Federico Navarrete

Ayrıca, aşağıdaki sınıfı eklemeniz gerekir: static public class HelperMethods {static public List <int> ConvertIntoIntList (this string [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, çıkış x)). (str => x) .ToList (); dönüş intList'i; }}
Federico Navarrete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.