文字列を分割し、ToList <int>()を1行で変換します


191

数字の文字列があります

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

分割して変換できます List<int>

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

文字列配列を整数リストに変換するにはどうすればよいですか?に変換できるようstring[]IEnumerable


今日はまったく同じ質問を持っていた:私をクリックしてください
ダリオ

3
「一行」では、非常に強いことが非常に厳しい要件です。</ perl>
dfa 2009年

2
この質問は、具体的には、数字の文字列を分割することを示しています。これにより、答えが簡単になります。Darioが言及した質問は、一般的な文字列に対するTryParseの問題を処理します(バグですか?)。
goodeye 2013年

回答:


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

4
リストに空の値またはnullがある場合、これは例外を取得します。
Muhammad Idrees

@ SayedM.Idreesは、分割する前にnullまたは空を確認するだけです。
RAVI VAGHELA

31

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

Jozeの方法はLINQも必要ToList()で、System.Linq名前空間にあります。

配列をリストコンストラクターに渡すことにより、配列をLinqなしでリストに変換できます。

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

17

int.TryParse例外を回避するためのより良い使用。

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


4

この拡張メソッドを使用することもできます

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

使用法:

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

3

Unity3dでは、int.Parseうまく機能しません。だから私はうなり声のように使います。

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

Unity3dユーザーのためにこのヘルプを願っています。


3

新しいC#6.0言語機能を使用できます。

  • デリゲート(s) => { return Convert.ToInt32(s); }を対応するメソッドグループに置き換えるConvert.ToInt32
  • 冗長なコンストラクター呼び出しを次のように置き換えますnew Converter<string, int>(Convert.ToInt32)Convert.ToInt32

結果は次のようになります。

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

2

私の問題も同様でしたが、文字列に文字が含まれている(空の場合もある)場合があるという不便さがありました。

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

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
ありがとう、セパレータを宣言してから使用しません。
Hugo Delsing

-2

あなたはこれを使うことができます:

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

2
Stack Overflowへようこそ!このコードスニペットは問題を解決する可能性がありますが、説明を含めると、投稿の品質を向上させるのに役立ちます。あなたは将来の読者のための質問に答えていることを覚えておいてください、そしてそれらの人々はあなたのコード提案の理由を知らないかもしれません。また、コードと説明の両方の読みやすさが低下するため、コードを説明コメントで混雑させないようにしてください。
さようならStackExchange 16

2
関数ConvertIntoIntListは終了しません。
Federico Navarrete

また、次のクラスを追加する必要があります。static public class HelperMethods {static public List <int> ConvertIntoIntList(this string [] stringList){int x = 0; var intList = stringList.Where(str => int.TryParse(str、out x)).Select(str => x).ToList(); intListを返します。}}
フェデリコナバ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.