从字符串初始化点数组
本文关键字:数组 初始化 字符串 | 更新日期: 2023-09-27 18:11:23
它们是将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)
};
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();
Regex也可以用于
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();
没有你想要的那么短——但这会起作用:
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)); }
事实上,我不认为这是可行的。你为什么要一行?上述解决方案是否运行太慢?我怀疑情况是否如此。
也许这是一个
"10,10;10,20;20,20;20,10;10,10".Split(';');
在字符串中的每个;
处拆分。然后取出每个元素,并将其转换为一个点。
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);
}
你完了!它不会是一行。实际上,单行代码用于将对象转换为对象。但是,由于您要从对象中取出数据,然后对其进行处理,然后将其转换为其他数据类型。这就是为什么,你将被要求工作。
上面的代码展示了如何创建数据数组,然后将其转换为一个点,然后将这些点推送到一个点数组中。
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的one-liner,尽管它不对输入进行任何健全性检查。