数字のある文字列があります
string sNumbers = "1,2,3,4,5";
分割してからList<int>
に変換できます
sNumbers.Split( new[] { ',' } ).ToList<int>();
文字列配列を整数リストに変換するにはどうすればよいですか? string[]
をIEnumerable
に変換できるように
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
また、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の方法にもLINQが必要です。ToList()
はSystem.Linq
名前空間にあります。
配列をリストコンストラクターに渡すことで、Linqなしで配列をリストに変換できます。
List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
配列をintして値を直接割り当てることもできます。
このような
int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
例外を避けるためにint.TryParse
をより適切に使用してください。
var numbers = sNumbers
.Split(',')
.Where(x => int.TryParse(x, out _))
.Select(int.Parse)
.ToList();
Unity3dでは、int.Parse
はうまく機能しません。だから私は以下のように使用します。
List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );
Unity3dユーザーのこのヘルプを願っています。
また、この拡張メソッドを使用できます
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(',');
私の問題は似ていましたが、文字列に文字が含まれていることがあるという不都合がありました(時には空です)。
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();
}
新しい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));