[.NET]將一組字串轉成整數陣列

有時在處理csv檔中的字串時,要將每列的字串Split後,轉成數值陣列要如何處理比較方便呢?

今天看到「Read CSV input from a text file and add integer values in each string read」,可將一組字串轉成int array。如下,


string parseStringList = @"123,456,789,123";
var list = parseStringList.Split(',').Select(int.Parse).ToArray();

imagea

但是如果字串中有非int的值,就會發生Exception。如下,


string parseStringList = @"123,456,789.1,123";
var list = parseStringList.Split(',').Select(int.Parse).ToArray();

image

 

所以,可以參考「How to convert a list of strings to ints ignoring non integers」,改使用「int.TryParse」來處理。如下,


string parseStringList = @"123,456,789.1,123";
var list2 = parseStringList.Split(',')
	.Where(x => { int r; return int.TryParse(x, out r); }).ToArray();

image

 

或是抽出成為Extension Method也可以。如下,


public static class StringExtensionMethod
{
	public static IEnumerable<int> AsInt(this IEnumerable<string> strings)
	{
		foreach (var s in strings)
		{
			int r; 
			if (int.TryParse(s, out r)) 
				yield return r;
		}
	}
}

 


string parseStringList = @"123,456,789.1,123";
var list3 = parseStringList.Split(',').AsInt().ToArray();

 

參考資料

Read CSV input from a text file and add integer values in each string read

How to convert a list of strings to ints ignoring non integers

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^