Pisahkan string, konversikan ToList <int> () dalam satu baris

191

Saya memiliki string yang memiliki angka

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

Saya dapat membaginya kemudian mengubahnya menjadi List<int>

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

Bagaimana saya bisa mengubah string array ke daftar integer? Sehingga saya akan dapat mengkonversi string[]keIEnumerable

uzay95
sumber
Kami memiliki pertanyaan yang persis sama hari ini: Klik saya
Dario
3
dalam "satu baris" si yang sangat kuat adalah persyaratan yang sangat ketat! </perl>
dfa
2
Pertanyaan ini secara khusus mengatakan untuk membagi serangkaian angka, yang membuat jawabannya tetap sederhana. Pertanyaan Dario disebutkan menangani (rawa di?) Masalah TryParse untuk string umum.
selamat tinggal

Jawaban:

463
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
mqp
sumber
4
Ini mendapatkan Pengecualian ketika Daftar memiliki nilai kosong atau nol.
Sayed Muhammad Idrees
@ SayedM.Idrees hanya memeriksa nol atau kosong sebelum membelah.
RAVI VAGHELA
31

Anda juga dapat melakukannya dengan cara ini tanpa memerlukan Linq:

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

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

Cara Joze juga membutuhkan LINQ, ToList()ada di System.Linqnamespace.

Anda dapat mengonversi Array ke Daftar tanpa Linq dengan meneruskan array ke Daftar konstruktor:

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

Penggunaan yang lebih baik int.TryParseuntuk menghindari pengecualian;

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

Dimungkinkan juga untuk array int untuk mengarahkan nilai penetapan.

seperti ini

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

Anda juga dapat menggunakan metode Ekstensi ini

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

pemakaian:

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

Di Unity3d, int.Parsetidak berfungsi dengan baik. Jadi saya gunakan seperti di bawah ini.

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

Semoga bantuan ini untuk Pengguna Unity3d.

HyoJin KIM
sumber
3

Anda dapat menggunakan Fitur Bahasa C # 6.0 baru:

  • ganti delegasi (s) => { return Convert.ToInt32(s); }dengan grup metode yang sesuaiConvert.ToInt32
  • ganti panggilan konstruktor berlebihan: new Converter<string, int>(Convert.ToInt32)dengan:Convert.ToInt32

Hasilnya adalah:

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

Masalah saya mirip tetapi dengan ketidaknyamanan bahwa kadang-kadang string berisi huruf (terkadang kosong).

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

Mencoba mengikuti Metode Ekstensi Pcode Xonos:

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(); 
}
Carlos Toledo
sumber
1
Terima kasih, meskipun Anda mendeklarasikan pemisah dan kemudian Anda tidak menggunakannya.
Hugo Delsing
-2

Anda bisa menggunakan ini:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList();
Charanjot
sumber
2
Selamat Datang di Stack Overflow! Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Cobalah juga untuk tidak membuat kerumunan kode Anda dengan komentar penjelasan, karena ini mengurangi keterbacaan kode dan penjelasannya!
Selamat tinggal StackExchange
2
Fungsi ConvertIntoIntList tidak keluar.
Federico Navarrete
Juga, Anda perlu menambahkan kelas berikut: HelperMethods public class static {static public List <int> ConvertIntoIntList (string ini [] stringList) {int x = 0; var intList = stringList.Where (str => int.TryParse (str, out x)). Pilih (str => x) .ToList (); kembalikan intList; }}
Federico Navarrete