当前位置: 首页 > news >正文

【Unity】R3 CSharp 响应式编程 - 使用篇(集合)(三)

1、ObservableList 基础 List 类型测试

    using System;using System.Collections.Specialized;using ObservableCollections;using UnityEngine;namespace Aladdin.Standard.Observable.Collections.List{public class ObservableListTest : MonoBehaviour{protected readonly ObservableList<int> observableList = new ObservableList<int>();public void Start(){ISynchronizedView<int, string> observableListSynchronizedView = this.observableList.CreateView((value) => $"这是测试数据: {value}");observableListSynchronizedView.ViewChanged += this.ObservableListSynchronizedViewViewChanged;this.observableList.Add(1);this.observableList.Add(2);this.observableList.Add(3);this.observableList.AddRange(new[] { 4, 5, 6 });this.observableList[4] = 8;this.observableList.RemoveAt(0);this.observableList.Move(2, 0);foreach (int value in this.observableList){Debug.LogError($"{value}");}foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}this.observableList.Sort();this.observableList.Reverse();this.observableList.Clear();observableListSynchronizedView.Dispose();}internal void ObservableListSynchronizedViewViewChanged(in SynchronizedViewChangedEventArgs<int, string> eventArgs){switch (eventArgs.Action){case NotifyCollectionChangedAction.Add:Debug.LogError($"添加数据:{eventArgs.NewItem.View}");break;case NotifyCollectionChangedAction.Move:Debug.LogError($"移动数据:{eventArgs.NewItem.View}");break;case NotifyCollectionChangedAction.Remove:Debug.LogError($"删除数据:{eventArgs.OldItem.View}");break;case NotifyCollectionChangedAction.Replace:Debug.LogError($"替换数据:{eventArgs.NewItem.View} {eventArgs.OldItem.View}");break;case NotifyCollectionChangedAction.Reset:Debug.LogError($"重置数据:{eventArgs.SortOperation.IsSort} {eventArgs.SortOperation.IsClear} {eventArgs.SortOperation.IsReverse}");break;default:throw new ArgumentOutOfRangeException();}}}}

2、List ObservableCollections Filter 过滤

    using ObservableCollections;using UnityEngine;namespace Aladdin.Standard.Observable.Collections.List{public class ObservableListFilter : MonoBehaviour{protected readonly ObservableList<int> observableList = new ObservableList<int>();public void Start(){this.observableList.Add(1);this.observableList.Add(20);this.observableList.AddRange(new[] { 30, 31, 32 });foreach (int value in this.observableList){Debug.LogError($"未过滤:{value}");}ISynchronizedView<int, string> observableListSynchronizedView = this.observableList.CreateView((value) => $"过滤: {value}");Debug.LogError($"数据长度:{observableListSynchronizedView.Count} ========================");observableListSynchronizedView.AttachFilter(value => value % 2 == 0);foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"数据长度:{observableListSynchronizedView.Count} ========================");observableListSynchronizedView.AttachFilter(x => x % 2 == 1);foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"数据长度:{observableListSynchronizedView.Count} ========================");observableListSynchronizedView.Dispose();}}}

3、List ObservableCollections Sort And Reverse(排序和反转)

    using System.Collections.Generic;using ObservableCollections;using UnityEngine;namespace Aladdin.Standard.Observable.Collections.List{public class ObservableListSortAndReverse : MonoBehaviour{protected readonly ObservableList<int> observableList = new ObservableList<int>();public void Start(){this.observableList.AddRange(new[] { 1, 301, 20, 50001, 4000 });foreach (int value in this.observableList){Debug.LogError($"正常数据:{value}");}ISynchronizedView<int, string> observableListSynchronizedView = this.observableList.CreateView((value) => $"数据: {value}");Debug.LogError($"数据长度:{observableListSynchronizedView.Count} ========================");observableListSynchronizedView.AttachFilter(value => value % 2 == 0);foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"======================== 数据正常过滤 ========================");this.observableList.Reverse();foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"======================== 数据反转数据长度 ========================");observableListSynchronizedView.ResetFilter();foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"======================== 取消数据过滤:{observableListSynchronizedView.Count} ========================");this.observableList.Sort();foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"======================== 数据排序 Sort ========================");this.observableList.Sort(new DescendantComparer());foreach (string value in observableListSynchronizedView){Debug.LogError($"{value}");}Debug.LogError($"======================== 数据排序 自定义 ========================");observableListSynchronizedView.Dispose();}struct DescendantComparer : IComparer<int>{public int Compare(int x, int y){return y.CompareTo(x);}}}}

4、List ObservableCollections Subscribe(数据事件订阅)

using System.Collections.Generic;using ObservableCollections;using R3;using UnityEngine;namespace Aladdin.Standard.Observable.Collections.List{/// <summary> 这里主要是测试集合添加数据移除数据的回调测试, Package: ObservableCollections.R3 </summary>public class ObservableListSubscribe : MonoBehaviour{protected readonly ObservableList<int> observableList = new ObservableList<int>();public void Start(){this.observableList.ObserveAdd().Subscribe(this.ObservableListAdd);this.observableList.ObserveChanged().Subscribe(this.ObservableListChanged);this.observableList.ObserveRemove().Subscribe(this.ObservableListRemove);this.observableList.ObserveReplace().Subscribe(this.ObservableListReplace);this.observableList.ObserveMove().Subscribe(this.ObservableListMove);this.observableList.ObserveReset().Subscribe(this.ObservableListReset);this.observableList.ObserveClear().Subscribe(this.ObservableListClear);this.observableList.ObserveReverse().Subscribe(this.ObservableListReverse);this.observableList.ObserveSort().Subscribe(this.ObservableListSort);this.observableList.ObserveCountChanged().Subscribe(this.ObservableListCountChanged);this.observableList.Add(1);this.observableList.Add(20);this.observableList.AddRange(new[] { 30, 31, 32 });this.observableList[1] = 60;this.observableList.Move(1, 0);this.observableList.RemoveAt(0);this.observableList.Move(1, 0);this.observableList.Sort();this.observableList.Sort(new DescendantComparer());foreach (int value in this.observableList){Debug.LogError($"{value}");}}struct DescendantComparer : IComparer<int>{public int Compare(int x, int y){return y.CompareTo(x);}}internal void ObservableListCountChanged(int count){Debug.Log($"数据长度变动:{count}");}internal void ObservableListSort((int Index, int Count, IComparer<int> Comparer) sortTuple){Debug.Log($"数据排序:{sortTuple.Index} {sortTuple.Count} {sortTuple.Comparer}");}internal void ObservableListReverse((int Index, int Count) reverseTuple){Debug.Log($"数据反转:{reverseTuple.Index} {reverseTuple.Count}");}internal void ObservableListClear(Unit unit){Debug.Log($"数据清理:{unit}");}internal void ObservableListReset(CollectionResetEvent<int> collectionEvent){Debug.Log($"数据重置:{collectionEvent.Index} isClear={collectionEvent.IsClear} isReverse={collectionEvent.IsReverse} isSort={collectionEvent.IsSort}");}internal void ObservableListMove(CollectionMoveEvent<int> collectionEvent){Debug.Log($"数据移动:ni={collectionEvent.NewIndex} oi={collectionEvent.OldIndex} v={collectionEvent.Value}");}internal void ObservableListChanged(CollectionChangedEvent<int> changedEvent){Debug.Log($"数据变动:o={changedEvent.OldItem} n={changedEvent.NewItem}");}internal void ObservableListReplace(CollectionReplaceEvent<int> replaceEvent){Debug.Log($"数据替换:o={replaceEvent.OldValue} n={replaceEvent.NewValue}");}internal void ObservableListRemove(CollectionRemoveEvent<int> removeEvent){Debug.Log($"删除数据:o={removeEvent.Value}");}internal void ObservableListAdd(CollectionAddEvent<int> addEvent){Debug.Log($"添加数据:{addEvent}");}}}

http://www.xdnf.cn/news/866989.html

相关文章:

  • Async-profiler 内存采样机制解析:从原理到实现
  • Elasticsearch中什么是分析器(Analyzer)?它由哪些组件组成?
  • 2025年- H68-Lc176--46.全排列(回溯,组合)--Java版
  • 通光散基因组-文献精读139
  • C++11 defaulted和deleted函数从入门到精通
  • 【更新中】(文档+代码)基于推荐算法和Springboot+Vue的购物商城
  • 【echarts】分割环形图组件
  • 【Java算法】八大排序
  • 【2025】通过idea把项目到私有仓库(3)
  • [Java 基础]银行账户程序
  • 如何选择合适的embedding模型用于非英文语料
  • 亚马逊站内信规则2025年重大更新:避坑指南与合规策略
  • golang常用库之-go-feature-flag库(特性开关(Feature Flags))
  • [蓝桥杯]密码脱落
  • NTC热敏电阻
  • 【Linux】进程
  • Pytorch模型格式区别( .pt .pth .bin .onnx)
  • nssm配置springboot项目环境,注册为windows服务
  • 【免杀】C2免杀技术(十五)shellcode混淆uuid/ipv6/mac
  • Mac 双系统
  • 深入详解开源工具DCMTK:C++开发的DICOM工具包
  • <el-table>构建树形结构
  • KrillinAI:视频跨语言传播的一站式AI解决方案
  • EasyRTC嵌入式音视频通信SDK音视频功能驱动视频业务多场景应用
  • HOPE800系列变频器安装到快速调试的详细操作说明
  • Delft3D软件介绍及建模原理和步骤;Delft3D数值模拟溶质运移模型建立;地表水环境影响评价报告编写思路
  • CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++
  • 前端大数高精度计算解决方案,BigNumber.js
  • 前端面试二之运算符与表达式
  • 组件库二次封装——透传问题