当前位置: 首页 > 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.lqws.cn/news/123373.html

相关文章:

  • Vue + Element Plus 实战:大文件切片上传 + 断点续传
  • 华为设备OSPF配置与实战指南
  • 【vue3学习】vue3入门
  • MySQL 事务深度解析:面试核心知识点与实战
  • 运维实施40-MGR高可用
  • Android 颜色百分比对照
  • 国产化Word处理控件Spire.Doc教程:Java实现HTML 转Word自动化
  • 四、函数调用包含单个参数之Double类型-mmword,movsd,mulsd,addsd指令,总结汇编的数据类型
  • 测试面试题总结一
  • Hive终极性能优化指南:从原理到实战
  • linux shell脚本硬件定时检测通过邮箱警告管理人员
  • c++提升
  • 【计算机网络】网络层协议
  • skynet monitor线程的作用
  • 【学习笔记】TCP 与 UDP
  • go语言学习 第4章:流程控制
  • FFmpeg avformat_open_input函数分析
  • 量化Quantization初步之--带量化(QAT)的XOR异或pyTorch版250501
  • Hadoop大数据集群深度实践:源码分析、参数调优与自动化运维平台选型全解
  • 从 CLIP 和 Qwen2.5-VL 入门多模态技术
  • Spine交换机和Leaf交换机
  • 解决idea编译运行项目时间长的问题
  • ideal2022.3.1版本编译项目报java: OutOfMemoryError: insufficient memory
  • spel 多层list嵌套表达式踩坑记
  • 智能进化论:AI必须跨越的四大认知鸿沟
  • 【Python实战】零基础实战教程(三) 变量与数据类型
  • 《IDEA 高效开发:自定义类/方法注释模板详解》
  • Apache POI操作Excel详解
  • 完成一个可交互的k8s管理平台的页面开发
  • C++——智能指针 unique_ptr