using System.Collections; using System.Collections.Generic; using UnityEngine; public class FaultOptions//HQB 故障信息数据结构 { public class L2Info { public string L2name = "";//二级现象名称 public List L2Limitation = new List();//二级现象的互斥 } public class FaultSituationL1 { public string name = ""; public List dataFaultSituationL2 = new List(); } public class FaultType { public string name = ""; public List dataFaultSituationL1 = new List(); } public string FaultDevice = ""; public List dataFaultType = new List(); public L2Info GetL2Info(string targetName) { foreach (var item in dataFaultType) { foreach (var item1 in item.dataFaultSituationL1) { foreach (var item2 in item1.dataFaultSituationL2) { if (item2.L2name.Equals(targetName)) return item2; } } } return null; } public (string FaultTypeName, string FaultSituationL1Name) GetFaultInfoByL2Name(string targetName) { foreach (var faultType in dataFaultType) { foreach (var faultSituationL1 in faultType.dataFaultSituationL1) { foreach (var l2Info in faultSituationL1.dataFaultSituationL2) { if (l2Info.L2name.Equals(targetName)) { return (faultType.name, faultSituationL1.name); } } } } // 如果没有找到匹配的L2名称,则返回默认值或抛出异常 // 这里返回空字符串作为示例,但您可能希望根据实际情况进行处理 return (string.Empty, string.Empty); // 或者 throw new Exception("L2名称未找到"); } public FaultOptions GetSelectedFaultOptions(List L2names) { FaultOptions faultOptions = new FaultOptions(); List addedFaultType = new List(); List addedFaultSituationL1 = new List(); foreach (var item in L2names) { L2Info l2Info = GetL2Info(item); (string FaultTypeName, string FaultSituationL1Name) ff = GetFaultInfoByL2Name(item); if (!addedFaultSituationL1.Contains(ff.FaultSituationL1Name) && !addedFaultType.Contains(ff.FaultTypeName)) { faultOptions.dataFaultType.Add(new FaultType { name = ff.FaultTypeName, dataFaultSituationL1 = new List { new FaultSituationL1 { name = ff.FaultSituationL1Name, dataFaultSituationL2 = new List{l2Info } } } }); addedFaultType.Add(ff.FaultTypeName); addedFaultSituationL1.Add(ff.FaultSituationL1Name); } else if (!addedFaultSituationL1.Contains(ff.FaultSituationL1Name)) { foreach (var item1 in faultOptions.dataFaultType) { if (item1.name == ff.FaultTypeName) { item1.dataFaultSituationL1.Add(new FaultSituationL1 { name = ff.FaultSituationL1Name, dataFaultSituationL2 = new List { l2Info } }); } } addedFaultSituationL1.Add(ff.FaultSituationL1Name); } else { foreach (var item1 in faultOptions.dataFaultType) { if (item1.name == ff.FaultTypeName) { foreach (var item2 in item1.dataFaultSituationL1) { if (item2.name == ff.FaultSituationL1Name) { item2.dataFaultSituationL2.Add(l2Info); } } } } } } return faultOptions; } }