Esempio n. 1
0
        /// <summary>
        /// 随机打乱字符串中的所有字符
        /// </summary>
        /// <param name="str">需要被打乱的字符串</param>
        /// <param name="seed">种子</param>
        /// <returns>被打乱的字符串</returns>
        public static string Shuffle(string str, int?seed = null)
        {
            KGuard.Requires <ArgumentNullException>(str != null);
            var random = KUtil.MakeRandom(seed);

            var requested = new string[str.Length];

            for (var i = 0; i < str.Length; i++)
            {
                var index = random.Next(0, str.Length - 1);

                requested[i]     = requested[i] ?? str.Substring(i, 1);
                requested[index] = requested[index] ?? str.Substring(index, 1);

                if (index == i)
                {
                    continue;
                }

                var temp = requested[i];
                requested[i]     = requested[index];
                requested[index] = temp;
            }

            return(KArray.Reduce(requested, (v1, v2) => v1 + v2, string.Empty));
        }
Esempio n. 2
0
        /// <summary>
        /// 生成一个随机字母(含大小写),数字的字符串。
        /// </summary>
        /// <param name="length">字符串长度</param>
        /// <param name="seed">种子</param>
        /// <returns>随机的字符串</returns>
        public static string Random(int length = 16, int?seed = null)
        {
            KGuard.Requires <ArgumentOutOfRangeException>(length > 0);

            var requested = string.Empty;
            var random    = KUtil.MakeRandom(seed);

            for (int len; (len = requested.Length) < length;)
            {
                var size  = length - len;
                var bytes = new byte[size];
                random.NextBytes(bytes);

                var code = Replace(new[] { "/", "+", "=" }, string.Empty, Convert.ToBase64String(bytes));
                requested += code.Substring(0, Math.Min(size, code.Length));
            }

            return(requested);
        }
Esempio n. 3
0
        /// <summary>
        /// 将规定数组中的元素打乱
        /// </summary>
        /// <typeparam name="T">数组类型</typeparam>
        /// <param name="source">规定数组</param>
        /// <param name="seed">种子</param>
        /// <returns>打乱后的数组</returns>
        public static T[] Shuffle <T>(T[] source, int?seed = null)
        {
            KGuard.Requires <ArgumentNullException>(source != null);
            var requested = new T[source.Length];

            Array.Copy(source, requested, source.Length);

            var random = KUtil.MakeRandom(seed);

            for (var i = 0; i < requested.Length; i++)
            {
                var index = random.Next(0, requested.Length - 1);
                if (index == i)
                {
                    continue;
                }
                var temp = requested[i];
                requested[i]     = requested[index];
                requested[index] = temp;
            }

            return(requested);
        }