英文:
Refactoring ifs and a foreach
问题
我在一个按照用户角色对用户进行排序的函数中有两个if条件语句。每个用户是一个具有属性如名称、密码等的对象,这些属性只是简单的字符串,但每个用户都有一个名为“Role”的内部对象,该对象具有一个名为“Name”的属性,该属性是一个字符串。代码看起来像这样:
public GetUsersSorted(string sortBy)
{
if(sortBy=='roles')
{
usersCollection = 获取用户,但不按任何顺序排序
}
else
{
usersCollection = 获取按其他方式排序的用户
}
items = 将用户映射到DTO(usersCollection)
if(sortBy=='roles')
{
items = 在内存中对用户进行排序(items)
}
}
private mapUsersToDTO(List usersSorted)
{
foreach(var item in usersSorted)
{
item.Roles = item.Roles.OrderBy(i => i.Name).ToList(); //在这里对用户的角色进行排序
}
usersSorted = usersSorted.OrderBy(b => b.Roles.First().Name()).ToList();
return usersSorted;
}
如何基于角色的名称更高效地对它们进行排序?这种方式也可以,但是我想基于所有角色的名称对它们进行排序。
英文:
I have two ifs in a function that sorts users by their roles, the users that access an application. Each user is an object with properties like name, password, which are just simple strings, but each user has an inner object, named Role that has a property Name, which is a string. The code looks something like:
public GetUsersSorted(string sortBy)
{
if(sortBy=='roles')
{
usersCollection = get the users, but not sorted by anything
}
else
{
usersCollection = get users sorted sorted by something else
}
items = mapUsersToDTO(usersCollection)
if(sortBy=='roles')
{
items = sortUsersInMemory(items)
}
}
private mapUsersToDTO(List usersSorted)
{
foreach(var item in usersSorted)
{
item.Roles = item.Roles.OrderBy(i => i.Name).ToList(); //here I sort the roles inside the user
}
usersSorted = usersSorted.OrderBy(b => b.Roles.First().Name()).ToList();
return usersSorted;
}
How can I sort them more efficiently, based on the Name of their Role? This works too but, I sort them based only on the first role, and I want to sort them based on all the names of their roles
答案1
得分: 1
以下是翻译好的内容:
听起来你的列表中有一个嵌套的列表,你想要嵌套的列表也是有序的。
users.Select(x => x.Roles.OrderBy(y => y.Name).ToList())
.OrderBy(x => x.Name).ToList();
这会对内部列表进行排序,然后对外部列表进行排序。
如果你发布一些实际的代码或者可能是你数据的模型,我可以更好地调整这个解决方案。
英文:
Sounds like you've got a list in your list and you want the nested list also ordered.
users.Select(x=>x.Roles.OrderBy(y=>y.Name).ToList())
.OrderBy(x=>x.Name).ToList();
This orders the internal list, then orders the outer list.
If you posted some actual code or maybe the model for your data, I could tailor that solution better.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论