C# 从数组/列表中随机获取N个元素

  • Post author:
  • Post category:其他




数组和列表方法拓展,复制到一个

静态类

里即可使用
	
    /// <summary>
    /// 获取数组随机N个元素
    /// </summary>
    /// <param name="array">指定数组</param>
    /// <param name="count">获取元素个数</param>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static T[] GetRandomChilds<T>(this T[] array,int count)
    {
        
        T[] tempArray = new T[array.Length];
        T[] tempResultArray = new T[count];
        
        array.CopyTo(tempArray,0);
        
        tempArray.SortRandom<T>();
        
        System.Array.Copy(tempArray,tempResultArray,count);

        return tempResultArray;
    }

    /// <summary>
    /// 获取列表随机N个元素
    /// </summary>
    /// <param name="list"></param>
    /// <param name="count"></param>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public static List<T> GetRandomChilds<T>(this List<T> list,int count)
    {
        List<T> tempList = new List<T>();
        
        // tempList = list.GetRange(0,list.Count);
        tempList.AddRange(list);
        tempList.SortRandom<T>();
        return tempList.GetRange(0,count);
    }

	/// <summary>
    /// 数组的2个元素位置调换
    /// </summary>
    public static void Swap<T>(this T[] array, int index1, int index2)
    {
        T temp = array[index2];
        array[index2] = array[index1];
        array[index1] = temp;
    }
    /// <summary>
    /// 列表的2个元素位置调换
    /// </summary>
    public static void Swap<T>(this List<T> list, int index1, int index2)
    {
        T temp = list[index2];
        list[index2] = list[index1];
        list[index1] = temp;
    }

    /// <summary>
    /// 乱序排序数组
    /// </summary>
    public static T[] SortRandom<T>(this T[] array)
    {
        int randomIndex;
        for (int i = array.Length - 1; i > 0; i--)
        {
            randomIndex = UnityEngine.Random.Range(0, i);
            array.Swap(randomIndex, i);
        }
        return array;
    }
    /// <summary>
    /// 乱序排序列表
    /// </summary>
    public static List<T> SortRandom<T>(this List<T> list)
    {
        int randomIndex;
        for (int i = list.Count - 1; i > 0; i--)
        {
            randomIndex = UnityEngine.Random.Range(0, i);
            list.Swap(randomIndex, i);
        }
        return list;
    }


调用如下
		int count = 5;
	    int[] array= new int[] { 0, 1, 2, 3, 4, 5, 6, 7 };
        int[] arrayTemp = array.GetRandomChilds<int>(count);
        // for(int i=0;i<arrayTemp.Length;i++){//Log测试
        //     Debug.Log(arrayTemp[i]);
        // }
        List<string> list = new List<string>(){"a", "b", "c", "d", "e", "f", "g"};
        List<string> listTemp = list.GetRandomChilds<string>(count);
        // for(int i=0;i<listTemp.Count;i++){//Log测试
        //     Debug.Log(listTemp[i]);
        // }



版权声明:本文为hzhnzmyz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。