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
{
[BOBCommand]
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
}
}