C# list<string> 怎么提取需要的内容并存入其他数组

例如list<string>s里有从文本里读取的“X100.013Y111.084Z1.07050”“X100.049Y110.931Z1.07569”“X100.191... 例如list<string>s里有从文本里读取的
“X100.013 Y111.084 Z1.07050”
“X100.049 Y110.931 Z1.07569”
“X100.191 Y110.652 Z1.08603”
“X100.412 Y110.431 Z1.09638”
“X100.691 Y110.289 Z1.10673”
“X100.844 Y110.253 Z1.11192”
“X101.008 Y110.240 Z1.11737”
怎么把其中的X\Y坐标存入二维数组呢?
展开
 我来答
freeeeeewind
推荐于2018-03-07 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1328万
展开全部

用正则表达式来实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        //定义一个结构存放X,Y坐标
        struct MyPoint
        {
            public float x;
            public float y;
            public override string ToString()
            {
                return string.Format("x={0}, y={1}", x, y);
            }
        }

        static void Main(string[] args)
        {
            //存放提取出的坐标点
            List<MyPoint> pointList = new List<MyPoint>();
            
            List<string> list = new List<string>()            {
                    "X100.013 Y111.084 Z1.07050",
                    "X100.049 Y110.931 Z1.07569",
                    "X100.191 Y110.652 Z1.08603",
                    "X100.412 Y110.431 Z1.09638",
                    "X100.691 Y110.289 Z1.10673",
                    "X100.844 Y110.253 Z1.11192",
                    "X101.008 Y110.240 Z1.11737"
            };
            
            //匹配模式串
            string pattern = @"X(?<x>\d+.\d+) Y(?<y>\d+.\d+) Z\d+.\d+";
            foreach (string s in list)
            {
                Match match = Regex.Match(s, pattern);
                if (match.Success)
                {
                    //从配合结果中取出x,y,并转换成浮点数
                    float xV = float.Parse(match.Result("${x}"));
                    float yV = float.Parse(match.Result("${y}"));
                    //存放到集合中
                    pointList.Add(new MyPoint() { x = xV, y = yV });
                }
            }
            
            // 结果数组
            MyPoint[] points = pointList.ToArray();

            // 显示提前结果
            for (int i = 0; i < points.Length; i++)
            {
                Console.WriteLine(points[i].ToString());
            }
        }
    }
}

玩转数据处理
2014-11-10 · 数据处理,Python,dotnet
玩转数据处理
采纳数:1613 获赞数:3794

向TA提问 私信TA
展开全部

我也来凑凑热闹,试著用Linq,感觉不错哦

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqTest1
{
    struct DoublePoint
    {
        private double x;
        private double y;
        public DoublePoint(double[] a)
        {
            this.x = a[0];
            this.y = a[1];
        }
        public double X
        {
            get { return this.x; }
            set { this.x = value; }
        }
        public double Y
        {
            get { return this.y; }
            set { this.y = value; }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() { "X100.013 Y111.084 Z1.07050",
                                                                                "X100.049 Y110.931 Z1.07569",
                                                                                "X100.191 Y110.652 Z1.08603",
                                                                                "X100.412 Y110.431 Z1.09638",
                                                                                "X100.691 Y110.289 Z1.10673",
                                                                                "X100.844 Y110.253 Z1.11192",
                                                                                "X101.008 Y110.240 Z1.11737"};
            var a = from item in list select new DoublePoint(Array.ConvertAll(item.Replace("X", "").Replace("Y", "").Substring(0, item.IndexOf(" Z") - 2).Split(' '), Double.Parse));
            DoublePoint[] value = a.ToArray();
        }
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
放羊的小星星
2014-11-07 · TA获得超过4066个赞
知道大有可为答主
回答量:2187
采纳率:60%
帮助的人:1550万
展开全部
你这些里的这些数字那么整齐还能不好存么,用一个for循环或者foeach循环,把这些数据全部遍历一遍,因为你这些数字过于整齐了,所以你完全可以拿出一项之后 s[i].substring(1,7),这样就拿出x了,同样s[i].substring(10,7)就拿出y了,因为你拿出来是string,记得再Convet.Double一下,就行了,拿出来的坐标你可以去定义一个二维数组都给放进去就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

推荐于2017-12-16 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
List<double[]> list=new List<double[]>();
foreach(string str in s)
{
string[] arr=str.Split(new char[]{' '},StringSplitOption.RemoveEmptyEntries);
if(arr.Length>=2)
{
doube x=Convert.ToDouble(arr[0].Trim('X'));
doube y=Convert.ToDouble(arr[1].Trim('Y'));
list.Add(new double[]{x,y});
}
}

//list就是你要的结果了

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鱼哭现l
2014-11-07
知道答主
回答量:21
采纳率:100%
帮助的人:5.2万
展开全部
float[] getzXYZ(string t)
        {
            if (t.IndexOf("X")<0 ||t.IndexOf("Y")<0||t.IndexOf("Z")<0)
            {
                return null;

            }

            string sx = t.Substring(t.IndexOf("X"), t.IndexOf("Y") - t.IndexOf("X")).Substring(1);
            string sy = t.Substring(t.IndexOf("Y"), t.IndexOf("Z") - t.IndexOf("Y")).Substring(1);
            string sz = t.Substring(t.IndexOf("Z")).Substring(1);

            float x = float.Parse(sx);
            float y = float.Parse(sy);
            float z = float.Parse(sz);
            float[] rtn=new float[3];
            rtn[0]=x;
            rtn[1]=y;
            rtn[2]=z;
            return rtn;
        }
        //自己迭代
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式