web-dev-qa-db-ja.com

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

数字のある文字列があります

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

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

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

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

164
uzay95
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
410
mqp

また、Linqを必要とせずに次のように行うこともできます。

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

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

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

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

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

配列をintして値を直接割り当てることもできます。

このような

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

例外を避けるためにint.TryParseをより適切に使用してください。

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

Unity3dでは、int.Parseはうまく機能しません。だから私は以下のように使用します。

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

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

3
HyoJin KIM

また、この拡張メソッドを使用できます

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
Pcodea Xonos

私の問題は似ていましたが、文字列に文字が含まれていることがあるという不都合がありました(時には空です)。

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
Carlos Toledo

新しい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));
1
Adrian Filip