0

2 つのリスト コレクションがあります。1 つは数字、もう 1 つは名前です。名前の 2 倍の数があります (常に)。コレクションから最初の名前を取得し、他のコレクションから最初の 2 つの数字を取得して、(VentriloUser) の 3 番目のユーザー コレクションにまとめます。次に、2 番目の名前を 3 番目と 4 番目の番号と一致させる必要があります。

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 に答える