我不知道這個問題的正確命名。基於雲有多少路徑,這是將層次列表轉換爲列表的更快方法嗎?
定義很簡單,這是一個層次列表(我也能產生扁平列表)
Simply show hierarchy view
hierarchy I able to get
1
-->2
-->3
-->4
-->5
-->6
flattened list I able to get
[1, 2, 3, 4, 5, 6]
結果我想是
[
[1,2],
[1,3,4],
[1,3,5],
[1,6],
]
樣品I類有
public class MemberNetworkViewModel
{
public int MemberGenerationNumber { get; set; }
public int MemberId { get; set; }
public int ParentId{ get; set; }
public List<MemberNetworkViewModel> children { get; set; }
}
我可以做最困難的方法,試圖獲得誰是這個層次列表中的最後一個節點,然後foeeach
他們並一一得到他們的父母。但我認爲會有更好的方式,有什麼想法?
當前解決方案(旁路,我所知道的是凌亂的,尋求通過LINQ較短的幫助也許?)
public List<List<MemberNetworkViewModel>> GetAllPossibleNetworkTreePath(
List<MemberNetworkViewModel> flatternMemberNetworkViewModel)
{
var possibleTreePaths = new List<List<MemberNetworkViewModel>>();
var lastNodes =
flatternMemberNetworkViewModel.Where(
x => flatternMemberNetworkViewModel.All(y => y.ParentId!= x.MemberId));
foreach (var lastNode in lastNodes)
{
var memberNetworkViewModels = new List<MemberNetworkViewModel>();
memberNetworkViewModels.Add(lastNode);
for (int index = 0; index < lastNode.MemberGenerationNumber; index++)
{
var parent =
flatternMemberNetworkViewModel.FirstOrDefault(
x => x.MemberId == memberNetworkViewModels.Last().ParentId);
memberNetworkViewModels.Add(parent);
}
memberNetworkViewModels = (from x in memberNetworkViewModels
orderby x.MemberGenerationNumber
select x).ToList();
possibleTreePaths.Add(memberNetworkViewModels);
}
return possibleTreePaths;
}
好像曲..我會使用一個樹而不是 –
然後你的子列表只是從根到葉的路徑,如果你需要它們可以很容易地獲得 –
@CedricDruck,因爲我需要根據樹路徑做一些檢查。我非常好奇,但這是客戶要求的。所以我認爲我自己的建議是更好的方法? –