![](/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.