自定义实现随机数组、列表、字典

实现一个静态类,里面有打乱数组、列表、字典等方法

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

public static class EnumItemExtends<T>
{
    /// <summary>
    /// Gets the disrupted items.//返回打乱顺序后的数组
    /// </summary>
    /// <returns>The disrupted items.</returns>
    public static T[] GetDisruptedItems(T[] obj) {
        //生成一个新数组:用于在之上计算和返回
        T[] item = new T[obj.Length];
        for(int i = 0;i < obj.Length;i++) {
            item[i] = obj[i];
        }


        T[] temp;
        temp = new T[item.Length];
        if(temp.Length <= 2 || item.Length <= 2) {
            return item;
        }
        for(int i = 0;i < temp.Length;i++) { temp[i] = item[i]; }
        //打乱数组中元素顺序
        System.Random rand = new System.Random();
        for(int j = 0;j < temp.Length / 2;j++) {
            int x, y; T t;
            x = rand.Next(0,temp.Length);
            do {
                y = rand.Next(0,temp.Length);
            } while(y == x);
            t = temp[x];
            temp[x] = temp[y];
            temp[y] = t;
        }
        return temp;
    }

    /// <summary>
    /// Gets the disrupted items.//返回打乱顺序后的list
    /// </summary>
    /// <returns>The disrupted items.</returns>
    public static List<T> GetDisruptedItems(List<T> obj) {
        //生成一个新数组:用于在之上计算和返回
        T[] item = new T[obj.Count];
        for(int i = 0;i < obj.Count;i++) {
            item[i] = obj[i];
        }

        T[] temp;
        temp = new T[item.Length];
        if(temp.Length <= 2 || item.Length <= 2) {
            return obj;
        }
        for(int i = 0;i < temp.Length;i++) { temp[i] = item[i]; }
        //打乱数组中元素顺序
        System.Random rand = new System.Random();
        for(int j = 0;j < temp.Length / 2;j++) {
            int x, y; T t;
            x = rand.Next(0,temp.Length);
            do {
                y = rand.Next(0,temp.Length);
            } while(y == x);
            t = temp[x];
            temp[x] = temp[y];
            temp[y] = t;
        }

        return new List<T>(temp);
    }


    /// <summary>
    /// Gets the disrupted items.//返回打乱顺序后的dic
    /// </summary>
    /// <returns>The disrupted items.</returns>
    public static Dictionary<T,T> GetDisruptedItems(Dictionary<T,T> obj) {
        //生成一个新数组:用于在之上计算和返回
        T[] item = new T[obj.Count];

        List<T> l_l = new List<T>(obj.Keys);
        for(int i = 0;i < l_l.Count;i++) {
            item[i] = l_l[i];
        }

        T[] temp;
        temp = new T[item.Length];
        if(temp.Length <= 2 || item.Length <= 2) {
            return obj;
        }
        for(int i = 0;i < temp.Length;i++) { temp[i] = item[i]; }
        //打乱数组中元素顺序
        System.Random rand = new System.Random();
        for(int j = 0;j < temp.Length / 2;j++) {
            int x, y; T t;
            x = rand.Next(0,temp.Length);
            do {
                y = rand.Next(0,temp.Length);
            } while(y == x);
            t = temp[x];
            temp[x] = temp[y];
            temp[y] = t;
        }

        Dictionary<T,T> dic_return = new Dictionary<T,T>();
        for(int q = 0;q < temp.Length;q++) {
            dic_return.Add(temp[q],obj[temp[q]]);
        }

        return dic_return;
    }
}

调用方式:

 //将targets的顺序打乱 targets是前面定义的数组
 GameObject[] trueTargets = EnumItemExtends<GameObject>.GetDisruptedItems(targets);

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值