我有节点对象
public class Node {
private Boolean isStart;
private IEnumerable<int> memberIds;
}
在 IEnumerable IEnumerable<Node>
中
并希望获取节点所在的所有成员 id,isStart=true;
我目前的答案是:
public IEnumerable<int> GetStartingMembers(IEnumerable<node> nodeList) {
IEnumerable<Node> startingNodes = nodeList.Where(n.isStartingNode == true);
IEnumerable<int> startingMembers = new List<int>();
foreach (var node in startingNodes) {
startingMembers = startingMembers.Concat(node.memberIds);
}
}
但这似乎太麻烦了——必须有更好的方法——有什么想法吗?
尝试
IEnumerable<int> startingMembers = nodeList.Where(n => n.isStartingNode)
.SelectMany(x => x.memberIds)
.ToList();
参考: 选择许多
首先,您的代码示例无法编译:错误的成员名称、错误的类名、错误的访问修饰符。但是,如果我们更改所有这些以编译您的代码,则减少到:
public IEnumerable<int> GetStartingMembers(IEnumerable<Node> nodeList)
=> nodeList.Where(n => n.isStart == true).SelectMany(n => n.memberIds);
public class Node
{
public Boolean isStart;
public IEnumerable<int> memberIds;
}