首页 > 其他分享 >Unity面向对象补全计划 之 List<T>与class(非基础)

Unity面向对象补全计划 之 List<T>与class(非基础)

时间:2024-09-03 16:54:58浏览次数:13  
标签:补全 Age List System Unity Student using public Name

C# & Unity 面向对象补全计划 泛型-CSDN博客

关于List,其本质就是C#封装好的一个数组,是一个很好用的轮子,所以并不需要什么特别说明

问题描述

假设我们有一个表示学生的类 Student,每个学生有姓名和年龄两个属性。我们需要创建一个学生列表,并实现以下功能:

  1. 添加学生到列表中
  2. 打印所有学生的信息(需要重写Tostring)
  3. 查找特定姓名的学生并打印其信息

 解决思路

用一个List来保存每一个学生的信息

        1.用List.Add方法添加学生

        2.用foreachi遍历打印

        3.用Find查找

数据图解

也就是说list<student> s

其中s[n]代表了一个个的student对象,而s[n].name,s[n].age才是我们要的数据,莫要搞混了

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Student : MonoBehaviour
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Student(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public override string ToString()
    {
        return $"Name: {Name}, Age: {Age}";
    }
}

管理类一览 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class StudentManager : MonoBehaviour
{
    List<Student> ss;
    private void Awake()
    {
        ss = new List<Student>();

        //添加
        ss.Add(new Student("张三",10));
        ss.Add(new Student("李四", 15));
        //遍历
        foreach (Student temp in ss)
        {
            Debug.Log(temp);
        }
        //查找
        string tempName1 = "张三";
        
        //注意下面这行我声明了一个临时的对象存储需要找到对象
        //Find可以传入函数所以我就使用了一个lambda表达式
        Student foundStudent1 = ss.Find((value)=>value.Name == tempName1);

        //其等价于
        //students.Find(delegate (Student s) {
        //    return s.Name == tempName1;
        //});

        if (foundStudent1 != null)        {

            Debug.Log($"已找到该学生{foundStudent1}");
        }
        else
        {
            Debug.Log($"未找到该学生{tempName1}");
        }
    }
}

注意事项:

添加和遍历并不难,查找需要特别说明一点,这里我用的Find甚至直接传入的lambda表达式

因为思路如下:

为什么不用Contains对比呢? 

Contains 方法依赖于 Equals 方法和 GetHashCode 方法来判断列表中是否包含某个对象,如果非要用Contains 来写的话,就需要像下面这样重写这两个函数

    public override bool Equals(object obj)
    {
        if (obj == null || GetType() != obj.GetType())
            return false;

        Student other = (Student)obj;
        return Name == other.Name && Age == other.Age;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(Name, Age);
    }

使用的时候则需要创建一个临时变量,传入要查找的值,还需要实例化一下所以不是太方便了

Student tempName1= new Student("Bob", 22);

标签:补全,Age,List,System,Unity,Student,using,public,Name
From: https://blog.csdn.net/2301_77947509/article/details/141863805

相关文章

  • C++STL之list容器:基本使用及模拟实现
    目录有了vector,为何还需listlist的使用1,push_back、push_front、pop_back、pop_front的使用2,正向、反向、const正向、const反向迭代器的使用正向、反向迭代器的使用const正向、const反向迭代器的使用3,operator=赋值4,insert、erase任意位置的插入、删除5,迭代器失效(......
  • Unity 脚本编译和构建(Build)说明(官方文档翻译校正)
    目录脚本重要概念事件函数的执行顺序脚本生命周期概述流程图的范围脚本生命周期流程图一般原则第一次场景加载(FirstSceneload)场景加载和卸载之前(Beforesceneloadandunload)Editor第一帧更新之前(Beforethefirstframeupdate)帧之间(Inbetweenframes)更新顺序(Upda......
  • ArrayList
    ArrayList目录ArrayList1ArrayList1.1ArrayList的构造方法和添加方法1.2ArrayList存储字符串并遍历1.3ArrayList存储学生对象并遍历2综合练习2.1学生管理系统实现步骤2.2学生类的定义2.3ArrayList02类的定义1ArrayList集合和数组的区别:​ 共同点:都是存储数据的......
  • unity的异步操作
    1.C#提供了两个关键字来实现异步async和awaitasync 关键字用于声明一个异步方法。该方法内部可以使用 await 关键字来等待异步操作的完成。当方法被标记为 async 时,它隐式地表示该方法可能会包含一个或多个 await 表达式。重要的是要注意,async 方法通常会返回一个 Task......
  • Unity实战案例 2D小游戏HappyGlass(模拟水珠)
    本案例素材和教程都来自Siki学院,十分感谢教程中的老师本文仅作学习笔记分享交流,不作任何商业用途预制体  在这个小案例中,水可以做成圆形但是带碰撞体,碰撞体比图形小一圈,顺便加上Trailrenderer组件 材质将碰撞材质的friction为0,bonciness可以按照需要修改脚本 ......
  • Stream List转Map
    需要注意的是:toMap如果集合对象有重复的key,会报错Duplicatekey....如:Student,Student1的id都为1002。可以用(k1,k2)->k1来设置,如果有重复的key,则保留key1,舍弃key2Map<Integer,Student>map=appleList.stream().collect(Collectors.toMap(Student::getId,a->a,(k1,k......
  • C# TcpClient bind,listen,accept,send receive
    //serverusingSystem;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;namespaceConsoleApp63{internalclassProgram{staticvoidMain(string[]args){intport=11000;TcpServerserver......
  • JAVA List<Map<String, Object>> sort 多个排序写法
     基本方法/***排序=**@paramlist*@paramsort_key*@return*/publicstaticList<Map<String,Object>>sort(List<Map<String,Object>>list,Stringsort_key,Booleanasc,Stringsort_key2,Boole......
  • 【好用小方法】随机生成n个汉字/数字转汉字/字符串去重/list数组去重/获取2的幂次方/
    /***根据参数生成n个中文汉字**@paramnum*@return*/publicstaticList<String>getChaineseList(intnum,List<String>aa){if(num<=0)returnaa;Stringword="";if(aa.size()>0){for(Strings:aa)......
  • Unity3d 截屏保存到相册,并且刷新相册
    要做一个截图的功能,并且玩家可以在相册中看到。 做的时候遇到了三个问题: 1、unity自带的截图API,Application.CaptureScreenshot在Android上不生效 2、图片保存的路径获取 3、保存的图片可以在手机的文件管理中找到,但是相册中没有。 解决......