![](/img/trans.png)
[英]Order items not changed after moving objects inside list by remove and add
[英]Order objects List items
在我的应用程序中,我有对象数组。 每个对象都包含带有URL的List
。 我想Lists
顺序显示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方法获取项目:
public string ShowData()
{
string singleItem = LinksArray.First();
LinksArray.RemoveAt(0);
return singleItem;
}
它可行,但我认为可能会有更优雅的方法来做到这一点。 你有什么主意吗?
尝试将所有内容展平为一组索引/ URL对,然后按索引排序:
var orderedUrls = objects
.SelectMany(o => o.Urls.Select((url, idx) => new { Index = idx, Url = url }))
.OrderBy(indexedUrl => indexedUrl.Index)
.Select(indexedUrl => indexedUrl.Url)
这对我有用:
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
}
名为ShowData
的方法永远不要修改其显示的数据。 相反,这样可能会更好地为您服务;
public IEnumerable<String> GetData()
{
return LinksArray;
}
然后可以使用;
foreach(Account acc in accounts)
{
foreach(String data in acc.GetData())
{
// add to listbox items
}
}
这样可以使您的数据与类的使用者显示和读取数据的方式保持清晰的区分。 也可以选择使用LINQ。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.