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


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();

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();

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) );

17

Penggunaan yang lebih baik int.TryParseuntuk menghindari pengecualian;

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

10

Dimungkinkan juga untuk array int untuk mengarahkan nilai penetapan.

seperti ini

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

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(',');

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.


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));

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(); 
}

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();

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.