我正在寻找有效的方法将国家/地区列表中的某些国家/地区移到列表顶部。
List<Countries> {"Italy","Germany","USA","England","Canada","Mexico"}
//do something
List<Countries> {"USA","Canada","Mexico","Italy","Germany","England"}
所以基本上我想把某些国家(美国,加拿大和墨西哥)排在首位,并以相同的顺序休息。
国家/地区列表实际上是一个ID与国家/地区名称相关联的对象。
答案 0 :(得分:3)
向SortOrder
添加名为Country
的字段:
public class Country
{
public string CountryName { get; set; }
public int SortOrder { get; set; }
}
然后,您可以使用LINQ
对List<Country>
进行排序
list.OrderBy(country => country.SortOrder);
您可以将所有其他国家/地区设为SortOrder=0
,并为想要拉到最顶层的国家/地区添加负数。
e.g。
var countries = new List<Country>();
countries.Add(new Country { CountryName="USA", SortOrder = -1 });
答案 1 :(得分:1)
您使用Linq标记了您的问题,但这不会修改现有的集合。你可以使用Linq创建一个具有不同标准的新集合,但这看起来并不像你在这里要求的那样。
这是使用List<T>
类的Sort
方法的一个简单解决方案:
var list = new List<string> {"Italy","Germany","USA","England","Canada","Mexico"};
// Items you want to pull to the front of the list, in reverse order
var toSort = new[] { "Mexico", "Canada", "USA" };
// Sort by index in toSort
list.Sort((x , y) => Array.IndexOf(toSort, y) - Array.IndexOf(toSort, x));
这将产生:
List<string> {"USA", "Canada", "Mexico", "Italy", "Germany", "England"};
注意:此示例使用string
值。要将此方法用于自定义类,您必须覆盖Equals
方法或适当调整比较委托。