0

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

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

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>();
        }


    }

我是一个业余爱好者,但希望有一天能从事一份事业。任何帮助深表感谢。感谢您的时间。

4

1 回答 1

3

使用 LINQ:

var users = names.Select((name,idx) => new VentriloUser(name, numbers[idx*2], numbers[idx*2+1]))
                 .ToList();

使用循环:

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]));
}
于 2012-07-26T07:08:59.283 回答