using Common.Attributes; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Command { [ATSCommand] public static class CommandArray { #region 数组操作 /// /// 从数组中获取指定位置的元素。 /// /// 要索引的数组。 /// 要获取的元素的位置。 /// 指定位置的元素。 public static object IndexArray(object Array, int Index) { return ((dynamic)Array)[Index]; } /// /// 设置数组中指定位置的元素为给定值。 /// /// 要设置元素的数组。 /// 要设置的元素的位置。 /// 要设置的值。 /// 修改后的数组。 public static object SetArrayElement(object Array, int Location, object Value) { ((dynamic)Array)[Location] = (dynamic)Value; return Array; } /// /// 将给定数组的长度设置为指定值,并返回一个新的数组。 /// 如果指定的长度小于原始数组的长度,则截取原始数组的一部分作为新数组。 /// /// 要设置长度的数组。 /// 新数组的长度。 /// 新的数组,或者原始数组(如果输入参数不是数组类型)。 public static object SetArrayLength(object Arr, int Length) { if (Arr is Array) { // 创建一个新的数组实例来存储结果 Array temp = Array.CreateInstance(Arr.GetType()!.GetElementType()!, Length); // 确定复制的长度,取原始数组长度和目标长度的最小值 int CopyLength = Math.Min(((Array)Arr).Length, Length); // 复制原始数组的元素到新数组中 Array.Copy((Array)Arr, temp, CopyLength); return temp; } else { // 如果输入参数不是数组类型,则返回原始数组 return Arr; } } /// /// 在指定位置插入元素到数组中。 /// /// 要插入元素的数组。 /// 要插入元素的位置。 /// 要插入的元素。 /// 插入元素后的数组。 public static object SetArrayInsertElement(object Arr, int Location, object InsertElement) { // 将数组转换为可编辑列表 var temp = Enumerable.ToList((dynamic)Arr); // 在指定位置插入元素 temp.Insert(Location, (dynamic)InsertElement); // 如果原数组是数组类型,则将可编辑列表转换回数组并返回 if (Arr is Array) { return Enumerable.ToArray(temp); } // 返回插入元素后的可编辑列表 return temp; } /// /// 从数组中删除指定的元素。 /// /// 要删除元素的数组。 /// 要从数组中删除的元素。 /// 删除元素后的数组。 public static object SetArrayDeleteElement(object Arr, object DeleteElement) { // 将数组转换为可编辑列表 var temp = Enumerable.ToList((dynamic)Arr); // 从列表中移除指定元素 temp.Remove((dynamic)DeleteElement); // 如果原数组是数组类型,则将可编辑列表转换回数组并返回 if (Arr is Array) { return Enumerable.ToArray(temp); } // 返回删除元素后的可编辑列表 return temp; } /// /// 从数组中删除指定位置的元素。 /// /// 要删除元素的数组。 /// 要从数组中删除的元素的位置。 /// 删除元素后的数组。 public static object SetArrayDeleteLocationElement(object Arr, int DeleteElementLocation) { var temp = Enumerable.ToList((dynamic)Arr); temp.RemoveAt(DeleteElementLocation); if (Arr is Array) { return Enumerable.ToArray(temp); } return temp; } /// /// 在数组中寻找第一个匹配的元素,并返回其索引位置。 /// /// 要搜索的数组。 /// 要寻找的元素。 /// 要寻找的元素在数组中的第一个匹配项的索引;如果未找到匹配项,则为 -1。 public static int ArrayQueryFirstMatchElement(object Arr, object QueryElement) { if (Arr is Array) { return Array.IndexOf((dynamic)Arr, (dynamic)QueryElement); } return ((dynamic)Arr).IndexOf((dynamic)QueryElement); } /// /// 替换数组中第一个匹配的元素为指定的新元素。 /// /// 要进行替换操作的数组。 /// 要替换的元素。 /// 要替换为的新元素。 /// 替换后的数组。 public static object ArrayReplaceFirstMatchElement(object Arr, object FirstMatchElement, object ReplaceElement) { var temp = Enumerable.ToList((dynamic)Arr); int Location = ArrayQueryFirstMatchElement(Arr, FirstMatchElement); temp[Location] = (dynamic)ReplaceElement; return temp; } /// /// 将数组中所有匹配的元素替换为指定的新元素。 /// /// 要进行替换操作的数组。 /// 要替换的元素。 /// 要替换为的新元素。 /// 替换后的数组。 public static object ArrayReplaceAllMatchElement(object Arr, object MatchElement, object ReplaceElement) { var temp = Enumerable.ToList((dynamic)Arr); int 长度 = temp.Count; for (int i = 0; i < 长度; i++) { if (((dynamic)Arr)[i] == (dynamic)MatchElement) { ((dynamic)Arr)[i] = (dynamic)ReplaceElement; } } return Arr; } /// /// 反转数组中元素的顺序。 /// /// 要反转的数组。 /// 反转后的数组。 public static object ArrayReverse(object Arr) { var temp = Enumerable.ToList((dynamic)Arr); temp.Reverse(); if (Arr is Array) { return Enumerable.ToArray(temp); } return temp; } /// /// 对数组进行排序。 /// /// 要排序的数组。 /// 排序后的数组。 public static object ArraySorting(object Arr) { var temp = Enumerable.ToList((dynamic)Arr); temp = Enumerable.ToList(Enumerable.Order(temp)); if (Arr is Array) { return Enumerable.ToArray(temp); } return temp; } /// /// 获取数组的长度。 /// /// 要获取长度的数组。 /// 数组的长度。 public static int GetArrayLength(object Arr) { if (Arr is Array) { return ((Array)Arr).Length; } return ((ICollection)Arr).Count; } /// /// 将对象转换为数组。 /// /// 要转换的对象。 /// 转换后的数组。 public static object objectConvertToArray(object Arr) { return Enumerable.ToArray((dynamic)Arr); } /// /// 将对象转换为列表。 /// /// 要转换的对象。 /// 转换后的列表。 public static object objectConvertToList(object Arr) { return Enumerable.ToList((dynamic)Arr); } /// /// 从数组中截取指定长度的子数组。 /// /// 要截取的数组。 /// 截取开始的位置。 /// 要截取的长度。 /// 截取得到的子数组。 public static object ArrayCapture(object Arr, int StartLocation, int Length) { var temp = Enumerable.ToList((dynamic)Arr); temp = Enumerable.ToList(Enumerable.Take(Enumerable.Skip(temp, StartLocation), Length)); if (Arr is Array) { return Enumerable.ToArray(temp); } return temp; } #endregion } }