在C#中过滤数组并将其分类

安奇

成员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
下面我有一个来自不同数据源的json数组。我的工作是获取json的每个项目的ID,并根据其来源将它们传递到不同的容器。此处区别的方法是,来自源A的项将仅具有属性Id,Project和ProjectId,而源于源A以外的项将具有更多属性,例如Id,名称,项目,类等。我想找出一种方法来获取来自源A以外的其他来源的ID,并列出来自哪个源的ID。我在这里仅考虑两个源,一个是源A(表示具有属性Id,Project和ProjectId的项目),而所有其他项目都作为源B。如何扩展现有功能以实现结果?


C#:
private List<string> GetFilteredDocIdsFromSBMessage(string sbMessage)
        {
            var data = JsonConvert.DeserializeObject<List<JObject>>( sbMessage );
            List<string> filteredResult = new List<string>();
            foreach(var recordingData in data )
            {               
                string[] PropertiesFromSb = new string[3] { "id", "Project", "ProjectId" };
                JProperty[] jProperties = recordingData.Properties().ToArray();
                List<string> jPropertyName = new List<string>();
                string id = string.Empty;
                foreach( JProperty prop in jProperties )
                {
                    jPropertyName.Add( prop.Name );
                    if(prop.Name == "Id" )
                    {
                        id = prop.Value.ToString();
                    }
                }
                var isSourceA = true;
                foreach( string property in PropertiesFromSb )
                {
                    if (!jPropertyName.Contains(property))
                    {
                        isSourceA = false;
                    }
                }
                if( isSourceA )
                {
                    filteredResult.Add( id );
                    
                }
            }           
            
          
            return filteredResult;
        }
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,530
地点
弗吉尼亚州切萨皮克
编程经验
10+
似乎只是一个简单的消除过程。从区分度最高的标准到区分度最低的标准来对数据进行分类。

因此,确实只有两个来源:来源A和来源B?还是不止两个来源?如果是这样,您告诉我们如何将来源A与其他来源区分开,但是其他来源又如何彼此区分?
 

安奇

成员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
似乎只是一个简单的消除过程。从区分度最高的标准到区分度最低的标准来对数据进行分类。

因此,确实只有两个来源:来源A和来源B?还是不止两个来源?如果是这样,您告诉我们如何将来源A与其他来源区分开,但是其他来源又如何彼此区分?
不,正如我提到的,只有两个分类器。一个是来源A,其余的都被视为来源B。请详细说明消除的过程
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,530
地点
弗吉尼亚州切萨皮克
编程经验
10+
这是伪代码:
C#:
IEnumerable<(string source, JObject item)> Classify(List<JObject> data)
{
    foreach(var recordingData in data)
    {
        var source = "sourceB";
        if (count == 3)
        {
            if (all properties match the names of the expected properties for source A)
                source = "sourceA";
        }
        yield return (source, recordingData);
    }
}
 
最佳 底部