在我的应用程序中,我有一些对象。每个对象都包含带有网址的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;
}
它有效,但我认为可能有更优雅的方式来做到这一点。你有什么想法吗?
答案 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。