如何给字段加“标签”?

本文介绍了一种通过创建实体类的标识加强版并利用反射机制实现字段加标识的方法,以此来区分不同级别的指标。

      在项目中遇到这么一个问题。需要为某些指标设置为一级指标,二级指标等。例如name这个指标是一级指标,age这个指标是二级指标,其实说白了就是给实体中的字段加上“标签”。给字段加“标签”?好像不行吧。如果是一个类的话就好办了。让这个类继承一个标识接口,然后说继承了这个接口的就是一级指标,这样就行了,那么是字段怎么办呢?首先作为一个实体类,他中的字段和数据库中是对应的,所以不能做手脚,我们可以另外声明一个类,是实体类的标识加强版就行了。不多说了,看代码吧。

      首先,先看看我的实体类。

      

 1     public class Person
 2     {
 3         public string Name { set; get; }
 4 
 5 
 6         public string Age { set; get; }
 7 
 8 
 9         public string Height { set; get; }
10 
11 
12         public string Weight { set; get; }
13     }
View Code

     下面定义我的实体类的标识加强版

 1  public class Person_Level:Entity
 2     {
 3         public string Name1 { set; get; }
 4 
 5 
 6         public string Age2 { set; get; }
 7 
 8         public string Height1 { set; get; }
 9 
10 
11         public string Weight2 { set; get; }
12     }
View Code

    为什么要这么定义呢,加强版的字段很有特点,前面是是实体中的字段,后面是1或2,表示是一级字段或二级字段。下面我们要做的就是把实体中的数据传输到实体类的标识加强版就行了。那么现在我们的主角登场了-------反射。写一个方法,将实体中的数据传递到加强版中。

 

 private Person_Level translate(Person p,Person_Level level){
           PropertyInfo[] p_property= p.GetType().GetProperties();
           PropertyInfo[] level_property = level.GetType().GetProperties();

           for (int i = 0; i < p_property.Length; i++) { //原来的
               for (int j = 0; j < level_property.Length; j++) { //要使用的
                   if (level_property[j].Name.Contains(p_property[i].Name)) {

                       level_property[j].SetValue(level, (string)p_property[i].GetValue(p));
                   }
               }
           }
               return level;
               
        }
View Code

最后验证一下,能不能传递过去。

   [Test]
        public void translateTest1()
        {
            Person p = new Person();
            p.Age = "12";
            p.Name = "linyang";
            p.Weight = "75斤";
            p.Height = "186";
            Person_Level level = translate(p, new Person_Level());
            Console.WriteLine(level.Weight2);
            Console.WriteLine(level.Height1);
            Console.WriteLine(level.Age2);
            Console.WriteLine(level.Name1);
        }
View Code

显示的结果为:

75斤
186
12
linyang

实践证明获取到值了,也就实现了给实体加标示并且数据不改变的目的。

 

ps:本人今天才开园,是新手。仅仅是为了记录一下项目的心得体会,也是交流经验,但是写的功力有限,望请见谅

 

转载于:https://www.cnblogs.com/linxiaoyang/p/3961769.html

在数据处理和机器学习领域,包含8个字段且前7个为特征、最后1个为标签的数据是常见的数据结构。 从数据标签体系角度来看,若这些数据需要打标签标签体系应满足规则清晰、支持多标签、动态更新、可查询与统计等要求。例如,这些数据可能会被标记为“敏感数据”“金融数据”等,且一个数据项可能有多个标签。同时,数据标签需随数据生命周期动态调整,也能快速查询所有打了某个标签的数据用于合规检查等操作[^1]。 从知识库元数据定义方面,每个字段可看作元数据字段,代表数据的某个特征或信息,而字段值则是该字段的具体信息或属性。比如这8个字段可能分别代表不同的特征,像“author”“language”等,每个字段都有其对应的具体值[^2]。 在数据存储和查询上,若将这些数据存储在数据库中,以文章表为例,假设tags字段存储标签,可通过特定的SQL语句拆分tags字段来处理多标签的情况。对于包含8个字段的数据,也可根据具体需求对标签字段进行类似处理,以便于查询和分析[^3]。 在机器学习中,前7个特征字段用于描述数据的各种属性,最后1个标签字段通常是我们要预测或分类的目标。根据这些特征和标签,可以构建模型进行训练和预测,例如使用分类算法对数据进行分类,根据前7个特征来预测最后1个标签的值。 ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier # 假设数据存储在CSV文件中,有8列,前7列是特征,最后1列是标签 data = pd.read_csv('data.csv') X = data.iloc[:, :7] # 特征 y = data.iloc[:, 7] # 标签 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 创建决策树分类器 clf = DecisionTreeClassifier() # 训练模型 clf.fit(X_train, y_train) # 预测 y_pred = clf.predict(X_test) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值