首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合numbers和names集合

组合numbers和names集合
EN

Stack Overflow用户
提问于 2012-07-26 14:59:17
回答 1查看 52关注 0票数 0

我有两个列表集合。一个是数字,另一个是名字。数字是名字的两倍(总是如此)。我想从集合中获取第一个名字,从另一个集合中获取前两个数字,然后将它们放在第三个用户集合(VentriloUser)中。然后第二个名字需要与第三个和第四个数字匹配,以此类推。

我在想一些带有for或foreach循环的东西,但我现在还不能理解它。

代码语言:javascript
复制
public class VentriloUser
    {
        public VentriloUser(string name, int seconds, int ping)
        {
            Name = name; Seconds = seconds; Ping = ping;
        }
        public string Name { get; set; }
        public int Ping { get; set; }
        public int Seconds { get; set; }
    }

public class Ventrilo
    {
        public Ventrilo(string statusurl)
        {
            StatusURL = statusurl;
        }

        public string StatusURL { get; set; }

        public string HTML { get; set; }

        public List<VentriloUser> Users { get; set; }

        private Regex findNumbers = new Regex("\\<td width=\"10%\" bgcolor=\"#\\w{6}\"\\>\\<font color=\"#000000\">\\<div style=\"overflow:hidden;text-overflow:ellipsis\"\\>-?\\d+\\<");
        private Regex findNames = new Regex("\\<td width=\"20%\" bgcolor=\"#\\w{6}\"\\>\\<font color=\"#000000\">\\<div style=\"overflow:hidden;text-overflow:ellipsis\"\\>\\b\\w+\\<");

        private WebClient wClient = new WebClient();

        public void DownloadHTML()
        {
            HTML = wClient.DownloadString(StatusURL);
        }

        public List<int> GetNumbers()
        {
            var rawnumbers = findNumbers.Matches(HTML);
            var numbers = new List<int>();

            foreach (var rawnumber in rawnumbers)
            {
                var match = Regex.Match(rawnumber.ToString(), "\\>\\-?\\d+\\<");

                string number = Regex.Replace(match.ToString(), "\\<|\\>", "");

                numbers.Add(Convert.ToInt32(number));
            }

            return numbers;
        }
        public List<string> GetNames()
        {
            var rawnames = findNames.Matches(HTML);
            var names = new List<string>();

            foreach (var rawname in rawnames)
            {
                var match = Regex.Match(rawname.ToString(), "\\>\\w+<");

                string name = Regex.Replace(match.ToString(), "\\<|\\>", "");

                names.Add(name);
            }

            return names;
        }

        public List<VentriloUser> GenerateUsers()
        {
            var numbers = GetNumbers();
            var names = GetNames();

            var users = new List<VentriloUser>();
        }


    }

我是一个业余爱好者,但希望有一天能追求自己的事业。任何帮助都是非常感谢的。谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-26 15:08:59

使用LINQ:

代码语言:javascript
复制
var users = names.Select((name,idx) => new VentriloUser(name, numbers[idx*2], numbers[idx*2+1]))
                 .ToList();

使用循环:

代码语言:javascript
复制
var users = new List<VentriloUser>();
for (int i = 0; i < names.Count; i++)
{
    var name = names[i];
    int j = i * 2;
    if (j >= numbers.Count - 1)
        break; // to be safe...
    users.Add(new VentriloUser(name, numbers[j], numbers[j + 1]));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11664040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档