订单对象列表项

时间:2016-09-20 00:11:47

标签: c#

在我的应用程序中,我有一些对象。每个对象都包含带有网址的List。我想按顺序显示Lists项:

First item from first objects list
First item from second objects list
First item from third objects list
Second item from first objects list
..
etc

现在我正在使用foreach循环:

            foreach (Account acc in account)
            {
                    listBox1.Items.Add(acc.ShowData())
            }

并在Account类中使用公共方法来获取项目:

public string ShowData()
{          
        string singleItem = LinksArray.First();
        LinksArray.RemoveAt(0);
        return singleItem;               
}

它有效,但我认为可能有更优雅的方式来做到这一点。你有什么想法吗?

3 个答案:

答案 0 :(得分:2)

尝试将所有内容展平为一组索引/网址对,然后按索引排序:

var orderedUrls = objects
    .SelectMany(o => o.Urls.Select((url, idx) => new { Index = idx, Url = url }))
    .OrderBy(indexedUrl => indexedUrl.Index)
    .Select(indexedUrl => indexedUrl.Url)

答案 1 :(得分:0)

这对我有用:

List<Uri>[] arrayOfListsOfUris = ...

IEnumerable<Uri> sorted =
    arrayOfListsOfUris
        .Select(xs => xs.Select((x, n) => new { x, n }))
        .Concat()
        .OrderBy(y => y.n)
        .Select(y => y.x);

foreach (Uri uri in sorted)
{
    //Do something with each Uri
}

答案 2 :(得分:0)

名为ShowData的方法永远不应修改它显示的数据。相反,你可能会更喜欢这样的事情;

public IEnumerable<String> GetData()
{
    return LinksArray;
}

然后你可以使用;

foreach(Account acc in accounts)
{
    foreach(String data in acc.GetData())
    {
        // add to listbox items
    }
}

这样可以清楚地区分您的数据以及该类消费者显示和阅读的方式。它还可以选择使用LINQ。