将string
转换为Point[]
是一种快速的方法(一两行)?
我的字符串:"10,10;10,20;20,20;20,10;10,10";
通缉结果:
Point[] point = new Point[5]
{
new Point(10, 10),
new Point(10, 20),
new Point(20, 20),
new Point(20, 10),
new Point(10, 10)
};
答案 0 :(得分:8)
string s = "10,10;10,20;20,20;20,10;10,10";
var points = s.Split(';').Select(x=>x.Split(','))
.Select(y=>new Point(int.Parse(y[0]),int.Parse(y[1])))
.ToArray();
答案 1 :(得分:2)
也可以使用正则表达式
string input = "10,10;10,20;20,20;20,10;10,10";
Point[] points = Regex.Matches(input, @"(\d+),(\d+)").Cast<Match>()
.Select(m => new Point(int.Parse(m.Groups[1].Value), int.Parse(m.Groups[2].Value)))
.ToArray();
答案 2 :(得分:0)
也许这一个
"10,10;10,20;20,20;20,10;10,10".Split(';');
在String中的每个;
处拆分。然后取出每个元素,并将其转换为Point。
string mainString = "10,10;10,20;20,20;20,10;10,10";
string[] stringArray = mainString..Split(';');
Point[] pointArray;
// convert them
foreach (var point in stringArray) {
// each object in array.
var eachItem = point.Split(','); // you have [10, 10]
var x = eachItem[0];
var y = eachItem[1];
Point pointItem = new Point(x, y);
pointArray.Add(pointItem);
}
你已经完成了!它不会是一条线。实际上,一个行代码用于将对象转换为对象。但是,由于您要从对象中取出数据然后再处理它,然后将其转换为其他数据类型。这就是为什么,你将被要求处理它。
上面的代码显示了如何创建数据数组,然后将其转换为单个点,然后将这些点推送到点数组。
答案 3 :(得分:0)
不像你想要的那么短 - 但这会奏效:
var values = "10,10;10,20;20,20;20,10;10,10";
var result = new List<Point>();
foreach (var point in values.Split(';'))
{
var split = point.Split(',');
var x = Convert.ToInt32(split[0]);
var y = Convert.ToInt32(split[1]);
result.Add(new Point(x, y));
}
这假设1)列表没问题。如果没有,请调用ToArray和2)您控制进入的数据并确定Convert.ToIn32永远不会失败。
编辑 -
这是您的单行解决方案:)
var values = "10,10;10,20;20,20;20,10;10,10"; var result = new List<Point>(); foreach (var point in values.Split(';')) { var split = point.Split(','); var x = Convert.ToInt32(split[0]); var y = Convert.ToInt32(split[1]); result.Add(new Point(x, y)); }
现实情况是,我不认为这是可行的。你为什么要一条线?以上解决方案运行得太慢了吗?我怀疑是这样的。
答案 4 :(得分:0)
var instring = "10,10;10,20;20,20;20,10;10,10";
var points =
instring.Split(';')
.Select(a => a.Split(','))
.Select(a => new Point(Convert.ToInt32(a[0]), Convert.ToInt32(a[1])))
.ToArray();
使用linq有一个班轮,虽然它没有对输入进行任何健全性检查。